可以存储多种数据类型的变量
Variable that can store several data types
我需要创建一个 class 可以在变量中存储 Person
、Dog
或 Cat
.
类型的值
我想声明一个变量,因为只有一个特定类型的对象将用于初始化 class 的实例。为每种类型声明一个变量会浪费资源,因为只会使用一个。
考虑一下:
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()
的 return 类型必须是 Object
那是行不通的。
我正在学习 Java 这真的很困扰我。
我是否应该改用继承并创建一个子class来处理每种类型?
添加接口说 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");
}
}
}
您可以使用泛型(您已经猜到了):
public class Container<T> {
T object;
Container(T a) {
object = a;
}
T getObject() {
return object;
}
}
或(标记)接口(概括)。
在您的以下代码中,您可以继续使用 Mammal 而不是区分猫和狗:
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 {...
Interfaces relate the classes together giving them a meaning while generics do not. (Muhammad Ali)
两种可能。
- 超级Class。
- 拿一个超级 class 有一些共同的行为并扩展你的所有
classes.
- 现在声明超级 class 引用以存储它的子 class。
- 这里可以使用泛型边界。
- 看这里Generics
- 使用界面。
- 声明接口并实现所有 classes。
- 现在在您的 class 中声明该引用以保存您的对象。
- 看这里interfaces。
您可以使用 instanceof 运算符和类型转换来处理子 class 特定功能。
我需要创建一个 class 可以在变量中存储 Person
、Dog
或 Cat
.
我想声明一个变量,因为只有一个特定类型的对象将用于初始化 class 的实例。为每种类型声明一个变量会浪费资源,因为只会使用一个。
考虑一下:
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()
的 return 类型必须是 Object
那是行不通的。
我正在学习 Java 这真的很困扰我。
我是否应该改用继承并创建一个子class来处理每种类型?
添加接口说 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");
}
}
}
您可以使用泛型(您已经猜到了):
public class Container<T> {
T object;
Container(T a) {
object = a;
}
T getObject() {
return object;
}
}
或(标记)接口(概括)。 在您的以下代码中,您可以继续使用 Mammal 而不是区分猫和狗:
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 {...
Interfaces relate the classes together giving them a meaning while generics do not. (Muhammad Ali)
两种可能。
- 超级Class。
- 拿一个超级 class 有一些共同的行为并扩展你的所有 classes.
- 现在声明超级 class 引用以存储它的子 class。
- 这里可以使用泛型边界。
- 看这里Generics
- 使用界面。
- 声明接口并实现所有 classes。
- 现在在您的 class 中声明该引用以保存您的对象。
- 看这里interfaces。
您可以使用 instanceof 运算符和类型转换来处理子 class 特定功能。