Java 可以存储多种数据类型的变量
我需要创建一个类,该类可以在变量中存储Java 可以存储多种数据类型的变量,java,generics,inheritance,polymorphism,generic-programming,Java,Generics,Inheritance,Polymorphism,Generic Programming,我需要创建一个类,该类可以在变量中存储Person、Dog或Cat类型的值 我想声明一个变量,因为只有一个特定类型的对象将用于初始化类的实例。为每种类型声明一个变量会浪费资源,因为只会使用一个变量 考虑这一点: Class Container { private Object object; ... Container(Person a){ object = a; } Container(Dog a){ object = a
Person
、Dog
或Cat
类型的值
我想声明一个变量,因为只有一个特定类型的对象将用于初始化类的实例。为每种类型声明一个变量会浪费资源,因为只会使用一个变量
考虑这一点:
Class Container {
private Object object;
...
Container(Person a){
object = a;
}
Container(Dog a){
object = a;
}
Container(Cat a){
object = a;
}
...
}
然后做:
Container contA = new Container(A);
Container contB = new Container(B);
System.out.println(contA.getObject().toString());
System.out.println(contA.getObject().toString());
理想情况下,在控制台中获得正确的输出
我研究了泛型和其他东西,但找不到任何像我需要的东西。你能告诉我我在找什么吗
Container
中的getObject()
可以处理带有instanceof
的类型,但是getObject()
的返回类型必须是Object
,这将不起作用
我正在学习Java,这真的让我很烦
我应该改为使用继承并创建一个子类来处理每种类型吗?添加一个接口,比如说
MeatBall
。从MeatBall
派生出所有三个类。现在,创建一个构造函数,将meatball作为输入。以类似的方式存储它。@Daniel为什么不让多个if块检查各自的类型并执行条件操作
比如:
class Container {
private Object object;
Container() {
}
Container(Object a) {
object = a;
}
public Object getInstance(){
return object;
}
}
class Dog extends Container {
Dog() {
}
Dog(Object a) {
super(a);
}
}
class Cat extends Container {
Cat() {
}
Cat(Object a) {
super(a);
}
}
public class ExampleCode {
public static void main(String[] args) {
Dog dogRef = new Dog();
Cat catRef = new Cat();
Container contReference1 = new Container(dogRef);
if(contReference1.getInstance() instanceof Dog)
{
System.out.println("Its a Dog");
}else if(contReference1.getInstance() instanceof Cat)
{
System.out.println("Its a Cat");
}else
{
System.out.println("Error: Unknown Object");
}
}
}
您可以使用泛型(您已经猜到的方式):
接口将类关联在一起,赋予它们意义,而泛型则没有。(穆罕默德·阿里) 有两种可能性
- 以一个有一些共同行为的超级类为例,扩展所有 上课
- 现在声明超级类引用来存储它的子类
- 这里可以使用泛型边界
- 看看这里
- 声明接口并实现所有类
- 现在在类中声明引用以保存对象
- 看看这里
您可以使用instanceof运算符和类型转换来处理特定于子类的功能。为每个类型声明一个变量会浪费资源,因为只会使用一个变量。-你为什么这么认为?我应该使用继承并创建一个子类来处理每种类型吗?听起来是个更好的主意,我假设如果我声明三个变量,系统将为三个变量保留空间。那么继承是一条路吗?谢谢@scarywombatt为什么投票被否决了?这不是我们在爪哇处理人、狗和猫的方式吗?听起来不错。我将学习一些关于接口的知识,看看是否适合我。你对使用泛型有什么看法?接口将类联系在一起,赋予它们意义,而泛型则没有。@MuhammadAli说得很好!我允许在我的答案中添加你的语句。泛型与C++中的模板一样吗?这听起来真的是个好办法。实际上,在发布问题之前,泛型会在搜索中出现,但只想为变量创建模板/泛型。你说的真正属于一起是什么意思?你介意详细阐述吗?”丹尼尔塞拉拉:是的,它和C++模板的概念相同。要对类变量使用泛型,需要使用泛型类。和:有关接口,请参见。您可以将它们用作公共接口以形成契约等,也可以用作标记特殊类的标记接口。但假设的A、B、C将存储在哪里?这应该与继承或泛型结合使用吗?谢谢丹尼尔,更新了我的答案。现在让我知道它是否有用。我将寻找泛型与接口的比较,看看什么最适合我,但我猜答案是两者之一。谢谢!
public class Container<T> {
T object;
Container(T a) {
object = a;
}
T getObject() {
return object;
}
}
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 {...