目前,我有这样的事情: -
public class MyHolder<T> {
private T value;
public MyHolder(T t) {
this.value = t;
}
public T getValue() {
return first;
}
public void setValue(T t) {
this.first = t;
}
}
有了这个,我可以这样使用它: -
MyBean bean = new MyBean();
MyHolder<MyBean> obj = new MyHolder<MyBean>(bean);
obj.getValue(); // returns bean
而不是将getter / setter调用为getValue()
和setValue(..)
,是否也可以“生成”?
基本上,拥有它getMyBean()
和setMyBean(..)
会很好,具体取决于传入的类型。虽然这是一个非常简单的例子,但是如果我创建一个通用的持有者类,它需要N通用属性,那么将它称为有意义的东西而不是getValue1()
或getValue2()
会很好,等等。
感谢。
答案 0 :(得分:5)
没有。 Java中没有这样的功能。我甚至无法想象它在语法上会是什么样的...... void set<T>();
?例如MyHolder<? extends Number>
的getter / setter看起来怎么样?
答案 1 :(得分:1)
不,除非您使用某种源代码生成器根据您的输入生成MyHolder
类,否则无法实现。
但另一方面,即使你有这种可能性,它与使用Map<String, T>
会有什么不同?所以调用将是:
MyBean bean = new MyBean();
MyHolder<MyBean> obj = new MyHolder<MyBean>(bean);
obj.get('value');
答案 2 :(得分:1)
不,不可能。 Java泛型基于类型擦除,即它主要是编译器提供的语法糖。这意味着每个泛型类实际上都是由“原始类型”实现的,其中类型参数是Object
,并且已经包含所有方法。因此,根据类型参数,根本不可能有不同的方法。