gpt4 book ai didi

java - 将 Getters/Setter 添加到一个基类

转载 作者:搜寻专家 更新时间:2023-11-01 02:48:38 25 4
gpt4 key购买 nike

我有一个想法,但无法弄清楚如何实现它。

public class BaseDomain<T>{

//Generic methods goes here

}

public class Domain1 extends BaseDomain<Domain1>{

private int id;

private String name;

//only properties should be present here

}

public class Domain2 extends BaseDomain<Domain2>{

private int id;

private String name;

//only properties should be present here

}

在上面的场景中,我可以轻松地在基类中定义所有泛型方法,并且可以通过使用泛型在我的所有域类中使用。但我的问题是我想设计一种机制,开发人员必须通过该机制只定义域类中的属性(没有 getters/setters),但是 BaseDomain 应该以某种方式提供getters/setters 动态地分配给每个域。

非常感谢任何建议!

最佳答案

通过反射,您可以做到这一点。

public class BaseDomain<T>{


public String getName() {
return this.getClass().getField("name").get(this);
}

public void setName(String value) {
this.getClass().getField("name").set(this, value);
}

}

请注意 this.getClass()将引用该对象的运行时类,即Domain1例如。因此,您可以访问那里的字段、获取/设置值等。

如果将属性声明为 private,则可能需要设置访问权限或 protected .他们是public ,它应该工作。

如 OP 所述,使用 getDeclaredFields()不会强制您声明公共(public)字段,不幸的是您必须迭代(或使用 Map )才能访问 Field具有特定的名称。

如果该字段不存在于您的对象实例中,您将得到一个异常。

关于java - 将 Getters/Setter 添加到一个基类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16482686/

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