在JAVA中创建灵活数据类型的变量

时间:2019-02-07 06:32:04

标签: java generics

我有class Aclass Bclass C

class C中,我声明了如下变量:

private A a;
private B b;
private ? thirdVariable;

我想声明第三个变量,其数据类型可以是A或B 。 这样我就可以根据自己的意愿分配这个变量 ab 的值。

3 个答案:

答案 0 :(得分:2)

如果A和B之间没有关系,则无法执行此操作。如果要执行此操作,则应使用将由A&B扩展的接口/类。

class X{}

class A extends X{
}

class B extends X{
}

private X thirdVariable;

如果您真的想使用Generic,则在类C中使用Generic构造函数,然后根据如下所示的Generic传递A/B的对象。

class C<T> {
    private T thirdVariable;

    C(T t) {
        thirdVariable = t;
    }
}

创建C对象时,可以指定并传递如下所示的对象类型。

    A a = new A();
    C<A> c1 = new C<A>(a);
    B b = new B();
    C<B> c2 = new C<B>(b);

答案 1 :(得分:1)

您可以创建(可能是抽象的)超类(我们将其称为class X),并使AB都从其扩展。然后,您的第三个变量可以声明为:

private X thirdVariable;

类似地,您可以创建一个接口(我们称其为interface Y)并使AB都实现它。然后,您的第三个变量可以声明为:

private Y thirdVariable;

因此,基本上,您想充分利用多态性,因为泛型没有足够的灵活性来表达想要的类型关系。

答案 2 :(得分:1)

您可以将Polymorphism(abstract) classInterface一起使用

  • Interface

    public Interface Parent{        }
    
    public class A implements Parent {        }
    
    public class B implements Parent {        }
    
    public class C {
        private A a;
        private B b;
        private Parent thirdVariable;
    }
    
  • (abstract) class:摘要是可选的,取决于您必须进行的设计和功能

    public (abstract) class Parent{        }
    
    public class A extends Parent {        }
    
    public class B extends Parent {        }
    
    public class C {
        private A a;
        private B b;
        private Parent thirdVariable;
    }