我可以借助Java中的构造函数从同一类数据构造多个类型的对象吗?
假设我有一个包含数据(a、b、c、d)的类(假设类名为“MyClass”),可以定义两个构造函数,一个用于使用数据(a、b、c)创建object1,另一个用于使用数据(a、c、d)创建object2。在这种情况下,所有数据类型都是相同的,比如说double 是的,你能做到我可以借助Java中的构造函数从同一类数据构造多个类型的对象吗?,java,Java,假设我有一个包含数据(a、b、c、d)的类(假设类名为“MyClass”),可以定义两个构造函数,一个用于使用数据(a、b、c)创建object1,另一个用于使用数据(a、c、d)创建object2。在这种情况下,所有数据类型都是相同的,比如说double 是的,你能做到 可以使用重载构造函数,就像使用重载方法一样。您只需要确保正确地重载它们,这样JVM在实例化对象时就不会产生歧义。根据object1和object2的类型,您可以或不能这样做 假设您有一个类Foo。如果您想要object和obj
可以使用重载构造函数,就像使用重载方法一样。您只需要确保正确地重载它们,这样JVM在实例化对象时就不会产生歧义。根据
object1
和object2
的类型,您可以或不能这样做
假设您有一个类Foo
。如果您想要object
和object2
这两种类型的Foo
,那么您可以实现这一点,如下所示:
class Foo{
//some methods....
public Foo(int arg1forObj1, int arg2ForObj1...){
//some code
}
public Foo(String arg1forObj2, String arg2ForObj2...){
//some code
}
}
请注意,这两个构造函数不应采用相同类型的参数,否则它们将是不明确的
然而,您希望
object1
和object2
具有不同的类型,不,您无法实现这一点。当您执行new Foo()
(即创建类的实例)时,该实例将始终是Foo
类型。不,您不能这样做
这两个构造函数将具有相同的签名:MyClass(double,double,double)
为了区分这两者,您必须为它们指定不同的名称,而构造函数不能这样做
但是,您可以创建不同名称的静态方法来代替构造函数使用,例如
public class MyClass {
// fields here
public static MyClass forObject1(double a, double b, double c) {
return new MyClass(a, b, c, 0);
}
public static MyClass forObject2(double a, double c, double d) {
return new MyClass(a, 0, c, d);
}
private MyClass(double a, double b, double c, double d) {
// assign to fields here
}
// methods here
}
但是歧义是不可避免的,你看我的问题,两个对象都需要三个参数(abc和acd),所有参数(abcd是同一类型的,是双参数)。你必须添加另一个参数来指示在这种情况下要创建的对象。一个布尔值就足够了,因为您只有两个选项。