在Java中使用基类对象指定子方法

rn0zuynd  于 2023-08-02  发布在  Java
关注(0)|答案(2)|浏览(90)

我写了下面的代码片段,以便在所有Child类中生成更好的可重用代码。

基础实体:

public class BaseEntity{
     Integer id; 
     //setter getters etc
}

字符串

子实体:

public class MyChild extends BaseEntity{
    String name;
    //setter getters etc
}


我有许多扩展BaseEntity的子类,想写一个方法来删除boilerplate代码。

工具类:

public class Util{
    public String getName(BaseEntity base){
        return base != null ? base.getChild().getName() : "";
    } 
}


问题是**base.getChild.name()**当child不是composition形式时,如何做类似的事情?我阅读过关于Java反射的文章,但不知道如何在这种情况下以优化的方式来做。还有比反思更好的选择吗?

ldioqlga

ldioqlga1#

如果你想使用Java Reflaction API,那么你可以用这样的方式调用“getName”方法:

Class<? extends BaseEntity> aClass = base.getClass();
Method method = aClass.getMethod("getName"); 
method.invoke(base);

字符串

4ngedf3f

4ngedf3f2#

如果子实体遵循相同的命名约定,则在BaseEntity中定义默认方法并实现接口可以处理这种情况

interface defaultGetName{
    default String getName(){
        throw new UnsupportedOperationException("getName not defined for this class");
    }
}
@Data
class BaseEntity implements defaultGetName{
    Integer id;
    //setter getters etc
}
public class Util{
    public String getName(BaseEntity base){
        return base != null ? base.getChild().getName() : "";
    } 
}

字符串

相关问题