Best way to add a string based constructor to a Java class?
constructor, java, tostring
Solution
This particular case is kind of awkward because of the two values, but what you can do is call a static method.
public Foo(Integer x, Integer y) {
this(new Integer[]{x, y});
}
public Foo(String xy) {
this(convertStringToIntegers(xy));
}
private Foo(Integer[] xy) {
this.x = xy[0];
this.y = xy[1];
}
private static Integer[] convertStringToIntegers(String xy) {
Integer[] result;
//Do what you have to do...
return result;
}
That being said, if this class doesn't need to be subclassed, it would be clearer and better and more idomatic to leave the constructors all private and have a public static factory method:
public static Foo createFoo(String xy) {
Integer x;
Integer y;
//etc.
return new Foo(x, y);
}
Problem
Say I have some class, e.g. Foo: ``` public class Foo { private Integer x; private Integer y; public Foo(Integer x, Integer y) { this.x = x; this.y = y; } public String toString() { return x + " " + y; } } ``` Now, I wish to add a constructor which takes as its argument a string representing a Foo, e.g. Foo("1 2") would construct a Foo with x=1 and y=2. Since I don't want to duplicate the logic in the original constructor, I would like to be able to do something like this: ``` public Foo(string stringRepresentation) { Integer x; Integer y; // ... // Process the string here to get the values of x and y. // ... this(x, y); } ``` However, Java does not allow statements before the call to this(x, y). Is there some accepted way of working around this?