在泛型类中创建泛型方法名称?

时间:2011-02-10 20:52:03

标签: java generics

目前,我有这样的事情: -

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()会很好,等等。

感谢。

3 个答案:

答案 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,并且已经包含所有方法。因此,根据类型参数,根本不可能有不同的方法。