gpt4 book ai didi

Java如何知道已经创建的对象的类型

转载 作者:行者123 更新时间:2023-12-02 05:19:57 26 4
gpt4 key购买 nike

我有两个从另一个类继承的类

class AEntity {
private String name;
public AEntity(String name){this.name = name;}
}

class Course extends AEntity {
private String code;
public Course(String name, String code){
super(name);
this.code = code;
}
}

class Classroom extends AEntity {
private String code;
public Classroom(String name, String code){
super(name);
this.code = code;
}
}

现在,有一个“中间”类,我想注意已创建的 AEntity 的类型。不同的类可以创建不同类型的AEntity。

class AEntityDefinition {
private AEntity entity;
public void setEntity(AEntity ae){this.entity = ae;}
public AEntity getEntity(){return this.entity;}
}

现在,我有一个创建 AEntity 类实例的类,因此我使用 AEntityDefinition 类。

class C1 {
private AEntityDefinition aEntityDefinition;
public C1(){
aEntityDefinition = new AEntityDefinition();
aEntityDefinition.setEntity(new Course("Course","Course code"));
}
}

最后,我想调用 getEntity() 以查看已创建的 AEntity 的类型。

public class EntityDefinition {
public static void main(String[] dgf){
AEntityDefinition aEntityDefinition = new AEntityDefinition();
System.out.println(aEntityDefinition.getEntity() instanceof Course);
System.out.println(aEntityDefinition.getEntity());
}
}

运行项目返回 null,因为 entity 变量在类外部未知。我的问题是:如何在不从 C1 传递的情况下获取 main 内 AEntity 的类型?有什么办法可以做到这一点,或者还有其他方法吗?预先感谢您。

上下文:

我有一些客户端代码,用于在 AEntityDefinition 中创建和存储 AEntity,该 AEntityDefinition 是另一个(未指定)类中的字段。我希望能够解决这个问题,而无需过多更改客户端类的代码,或者最好根本不更改,因为有许多类可以是容器。

最佳答案

你可以提供一个 setter/getter :

class C1 {
private AEntityDefinition aEntityDefinition;
public C1(){
aEntityDefinition = new AEntityDefinition();
aEntityDefinition.setEntity(new Course("Course","Course code"));
}

public Class<? extends AEntity> getEntityType() {
return aEntityDefinition.getEntity().getClass();
}
}

您可能需要在其中进行一些空检查,以防实体定义或实体可能为空。

<小时/>

如果您无法更改类 C1,但您知道它有一个 AEntityDefinition 字段,并且您想要获取对其中的 AEntity 实例的引用,则可以使用反射:

public static Class<? extends AEntity> getEntityType(Object o) throws Exception {
for (Field field : o.getClass().getDeclaredFields()) {
if (AEntityDefinition.class.isAssignableFrom(field.getType())) {
AEntityDefinition def = (AEntityDefinition) field.get(o);
return def.getEntity().getClass();
}
}
return null;
}

关于Java如何知道已经创建的对象的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26588873/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com