如何使用一个变量创建一个对象,该变量可以是两种数据类型之一?

时间:2013-08-11 10:26:00

标签: java object variable-assignment conventions

我想创建一个只包含一个变量的对象,但该变量可以是两种特定数据类型之一。我该怎么做?

我在考虑给它一个Object(通用)变量然后做检查以查看给定的参数是否在正确的类中。

但后来我尝试创建一个空对象'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个变量。每个变量可以是一个类型的对象,也可以是一个整数(神秘类型b),它将数组中的索引最终引用到另一个z变量。

如果你继续跟踪z变量的踪迹,你最终会得到一个p变量,这是基本情况的排序。

2 个答案:

答案 0 :(得分:1)

这个任务是类继承的用途;您应该选择或编写一个表示数据类型共有的东西的类或接口,并且变量应该是该类型。数据类型应继承(实现)超类型。

答案 1 :(得分:0)

也许你正在寻找泛型。

public class DataStorage<T>
{
   private T data;
   public DataStorage(final T data)
   {
      this.data = data;
   }
   public T getData()
   {
      return this.data;
   }
}

DataStorage<a> aData = new DataStorage<a>(new a());
DataStorage<b> bData = new DataStorage<b>(new b());
DataStorage<Integer> intData = new DataStorage<Integer>(new Integer(3));