gpt4 book ai didi

java - 如何创建返回类型为父类(super class)的任何子类型的方法

转载 作者:行者123 更新时间:2023-12-02 06:16:53 24 4
gpt4 key购买 nike

预信息。

public abstract class Person {}
public class A extends Person{}
public class B extends Person{}
public class C extends Person{}

public X getPersonByType(String type){
//This Method will return either A or B or C based on type
//what should X be ?
}

我需要创建一个接受 String 的方法并返回一个对象,该对象是 Person 的子类型.

更多信息。每个类 A B C 都有一个属性 public List Roles。这些不能移动到 Person 类,因为我需要这些唯一命名(JPA 多对多表)。

现在如果可能的话,我不希望它返回person因为我无法访问角色属性(人不知道它)。我还希望有一个解决方案(如果可能的话)不需要我强制转换或使用instanceOf(如果可能的话再次)。

P.S 尝试过 <? extends Person>但 Eclipse 给了我错误“方法的返回类型丢失”

最佳答案

public Person getPersonByType(String type) 应该可以正常工作,因为所有返回类型都扩展 Person

如果您想在调用此方法后避免 instanceof 检查,您还可以添加额外的类参数:

public <T extends Person> T getPersonByType(String type, Class<T> type) {
...
// cast result to T
}

使用这种方式,您可以直接将返回类型分配给子类:

C c = getPersonByType("c", C.class);

请注意,如果您传入彼此不匹配的 String 和 Class 参数,这可能会导致 ClassCastExceptions

关于java - 如何创建返回类型为父类(super class)的任何子类型的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19254750/

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