Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何创建只有一个变量的对象,该变量可以是两种数据类型之一?_Java_Object_Variable Assignment_Conventions - Fatal编程技术网

Java 如何创建只有一个变量的对象,该变量可以是两种数据类型之一?

Java 如何创建只有一个变量的对象,该变量可以是两种数据类型之一?,java,object,variable-assignment,conventions,Java,Object,Variable Assignment,Conventions,我想创建一个只包含一个变量的对象,但该变量可以是两种特定数据类型之一。我该怎么做 我想给它一个对象(泛型)变量,然后检查给定的参数是否包含正确的类 但后来我尝试创建一个空对象“x”,然后再创建两个对象“a”和“b”,这扩展了第一个对象。看起来不错 例如: x variable = new a(); // okay x variable2 = new b(); // okay x variable3 = "hello"; // not okay, since it is a String.

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

我想给它一个对象(泛型)变量,然后检查给定的参数是否包含正确的类

但后来我尝试创建一个空对象“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”的对象数组列表

每个z变量有2个变量。每个变量可以是类型a的对象,也可以是一个整数(神秘类型b),它引用数组中的一个索引,最终指向另一个z变量


如果您继续跟踪z变量的轨迹,您最终将得到一个p变量,这是基本情况。

此任务就是类继承的目的;您应该选择或编写一个类或接口,该类或接口表示数据类型的共同点,并且变量应该是该类型的。数据类型应该继承(实现)超类型。

也许您正在寻找泛型

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));
公共类数据存储
{
私有T数据;
公共数据存储(最终T数据)
{
这个数据=数据;
}
公共T getData()
{
返回此.data;
}
}
DataStorage aData=新数据存储(new a());
DataStorage bData=新数据存储(新b());
DataStorage intData=新数据存储(新整数(3));

用一个变量保存两种不同类型的数据听起来不太正确。你不是真的需要字段吗?我认为你应该给我们展示你想要创建的实际类。我可以这样做,但是其中一个字段总是空的,我必须包含额外的代码来根据程序主体中程序的当前状态选择正确的一个。我想这叫做封装?您想让您的对象易于被任何程序使用?不确定:P.你必须告诉我们为什么不能这样做:
a variableA=newa()
b variableB=new b()
int c=3添加了另一个编辑来提供一些背景。你能提供一个例子吗?谢谢。@GregCawthorne java.swing有一些很好的例子。JComponent表示所有组件的共同点。它的子类代表了特定组件的特性。谢谢你简洁的建议。虽然我不确定这在功能上与我在OP中建议的第一个方法有什么不同(对象数据类型的使用是什么)?因为似乎接受任何数据类型,除非您在哪里包含检查。我可能错了,你有打字安全。您可以这样做:
Integer intValue=intData.getData()没有任何类型转换。我认为我不需要类型安全。除非铸造是一个昂贵的过程,这将减少它?