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,这真的让我烦恼.
我应该使用继承并创建一个子类来处理每种类型吗?
你可以使用泛型(你已经猜到了):
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)
接口将类联系在一起,赋予它们一定的含义,而泛型却没有.(穆罕默德阿里)