可以存储多种数据类型的变量

Dan*_*ura 2 java generics polymorphism inheritance generic-programming

我需要创建一个可以在变量中存储类型值的类Person,Dog或者Cat.

我想声明一个变量,因为只有一个特定类型的对象将用于初始化类的实例.为每种类型声明一个变量将浪费资源,因为只使用一个.

考虑一下:

Class Container {
    private Object object;
    ...
    Container(Person a){
        object = a;
    }
    Container(Dog a){
        object = a;
    }
    Container(Cat a){
        object = a;
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

然后做:

Container contA = new Container(A);
Container contB = new Container(B);

System.out.println(contA.getObject().toString());
System.out.println(contA.getObject().toString());
Run Code Online (Sandbox Code Playgroud)

理想情况下,在控制台中获得正确的输出.

我研究了仿制药和其他东西,但却无法找到我需要的东西.你能指点我正在找的东西吗?

getObject()Container能与处理的类型instanceof,但返回类型getObject()必须是Object而且将无法正常工作.

我正在学习Java,这真的让我烦恼.

我应该使用继承并创建一个子类来处理每种类型吗?

Dat*_*atz 5

你可以使用泛型(你已经猜到了):

public class Container<T> {
    T object;
    Container(T a) {
        object = a;
    }

    T getObject() {
        return object;
    }
}
Run Code Online (Sandbox Code Playgroud)

或(标记)界面(概括).在您的以下代码中,您可以继续使用Mammal而不是区分Cats和Dogs:

public interface Mammal {
}

public class Container {
    Mammal object;
    Container(Mammal a) {
        object = a;
    }

    Mammal getObject() {
        return object;
    }
}

public class Cat implements Mammal {...
public class Dog implements Mammal {...
public class Person implements Mammal {...
Run Code Online (Sandbox Code Playgroud)

接口将类联系在一起,赋予它们一定的含义,而泛型却没有.(穆罕默德阿里)