我想创建一个只包含一个变量的对象,但该变量可以是两种特定数据类型之一。我该怎么做?
我在想只是给它一个对象(通用)变量,然后检查给定的参数是否在正确的类中。
但后来我尝试创建一个空对象“x”,然后再创建两个对象“a”和“b”,它们扩展了第一个对象。这似乎可以编译。
例如:
x variable = new a(); // okay
x variable2 = new b(); // okay
x variable3 = "hello"; // not okay, since it is a String.
有这样做的“正确”方式吗?我不是特别喜欢我的第二种方法,因为给我留下了一个空的类文件,第一种方法似乎有点笨拙。
编辑:
在上面提到的第一个方法中,类看起来有点像这样:
public class x{
Object var;
public x(Object var1){
if (var1.getClass() == a.class || var1.getClass() == b.class){
this.var = var1;
}
}
}
我还可以为每种数据类型参数组合创建不同的构造函数,如下所示:
public class x {
Object var;
public x(a var1){
this.var = var1;
}
public x(b var1){
this.var = var1;
}
}
第二种方法使用 3 个不同的类:
public class x{
//empty
}
public class a extends x{
// some fields
// constructors
}
public class b extends x{
// some fields
// constructors
}
EDIT2 - 问题的更多背景:
我有一个对象'z',它需要保存两个变量(值得一提)。这些变量可以是“a”、“a”或“a”、“b”或“b”、“a”或“b”、“b”类型。我的程序就是这样。然后我想创建一个可以是“a”或“b”的新数据类型,以简化“z”对象,所以它总是两个“x”变量(可以是“a”或“b” )。
我总是可以在对象“z”中创建两个“a”变量和两个“b”变量,并在初始化它们时保留 2 个 null,但这似乎是一种糟糕的风格。
在我的程序中有一个'z'类型的对象的ArrayList。
每个 z 变量有 2 个变量。每个变量可以是 a say 类型的对象,也可以是整数(神秘类型 b),它指向数组中的索引,最终指向另一个 z 变量。
如果您继续跟踪 z 变量的踪迹,您最终将到达 ap 变量,这是一种基本情况。