gpt4 book ai didi

java - 如何为java对象动态添加属性?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:41:04 27 4
gpt4 key购买 nike

有学生类。

Class Student{
String _name;
....
....

public Student(){
}
}

是否有可能向学生对象添加动态属性?不扩展学生类。

最佳答案

简而言之,是的,可以在运行时修改字节码,但它可能会非常困惑,而且(很可能)不是您想要的方法。但是,如果您决定采用这种方法,我推荐使用字节码操作库,例如 ASM。

更好的方法是使用 Map<String, String>对于“动态”getter 和 setter,以及一个 Map<String, Callable<Object>>对于任何不是 getter 或 setter 的东西。然而,最好的方法可能是重新考虑为什么您需要完全动态类。

public class Student {

private Map<String, String> properties = new HashMap<String, String>();
private Map<String, Callable<Object>> callables = new HashMap<String, Callable<Object>>();
....
....
public String getProperty(String key) {
return properties.get(key);
}

public void setProperty(String key, String value) {
properties.put(key, value);
}

public Object call(String key) {
Callable<Object> callable = callables.get(key);
if (callable != null) {
return callable.call();
}
return null;
}

public void define(String key, Callable<Object> callable) {
callables.put(key, callable);
}
}

请注意,您可以通过使用 Callable 并在其中返回 null 来定义具有此概念的 void 方法。

关于java - 如何为java对象动态添加属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12832554/

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