【发布时间】:2015-05-29 17:50:58
【问题描述】:
我想知道,如果我有以下情况怎么办:
public class MyObject<T> {
private T myTObject;
public void setMyTObject(T m) {
myTObject = m;
}
public T getMyTObject() {
return myTObject;
}
}
现在我希望该类做出如下反应:
MyObject<ObjectA> objA = new MyObject<ObjectA>();
ObjectA objAInstance = objA.getObjectA();
或
objA.setObjectA(otherObjectAInstance);
有没有办法根据 T 类名动态创建方法? 还是我应该更好地将 ObjectA 扩展到 MyObject 并使用 super.get/seMyObject() 创建这些方法?
澄清:
想法是动态生成getter和setter方法 所以,如果我创建一个实例:
MyObject<A> objA = new MyObject<A>();
我可以调用方法:
objA.getA();
getA() 将在内部调用 getMyTObject() 或只返回 myTObject
所以 MyObject 可能会根据 T 类做出反应并生成相应的方法。
我已更新成员属性以区别于 MyObject 类,这可能会导致混淆。还修复了方法返回和参数类型。
【问题讨论】:
-
嗯,generate classes and methods on the fly with byte code generators 是可以的,但这并不容易。还有一个使用反射的Proxy 类。但总的来说,如果可以的话,最好使用扩展。
-
我认为应该注意java反射..
-
我没有读到任何关于你为什么要这样做的信息?仅仅因为您可以或者是您发现它是更好的 getter 和 setter 命名约定以依赖于实际的泛型类型的唯一原因?在后一种情况下,只需忘记它,没有人这样做,这不值得,只需为您的 getter 和 setter 使用通用名称,一切都很好。确实没有任何好处,所有现代 IDE 都会告诉您返回和设置的具体对象类型。查看标准 Java API 和通用类,如 List
、Map 等。