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

Java 在泛型类中创建泛型方法名称?,java,generics,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; } } My

目前,我有这样的想法:-

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
公共类MyHolder{
私人T值;
公共持有人(T){
该值=t;
}
公共T getValue(){
先返回;
}
公共无效设置值(T){
第一个=t;
}
}
有了这个,我可以这样使用它:-

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
MyBean=newmybean();
MyHolder obj=新的MyHolder(bean);
obj.getValue();//返回豆
与其将getter/setter调用为
getValue()
setValue(…)
,还可以将其“泛化”吗

从本质上说,根据传入的类型,拥有它将是一件好事。假设这是一个非常简单的示例,但是如果我创建一个接受N个泛型属性的泛型holder类,那么最好将其称为有意义的类,而不是
getValue1()
getValue2()
,依此类推


谢谢。

没有。Java中没有这样的功能。我甚至无法想象它在语法上会是什么样子<代码>无效集()?例如,
MyHolder不,除非您使用某种源代码生成器根据您的输入生成
MyHolder
类,否则这是不可能的

但另一方面,即使你有这种可能性,它与使用
地图
有何不同?因此,调用内容如下:

MyBean bean = new MyBean();
MyHolder<MyBean> obj = new MyHolder<MyBean>(bean);
obj.get('value');
MyBean=newmybean();
MyHolder obj=新的MyHolder(bean);
对象获取(“值”);

不,不可能。Java泛型基于类型擦除,也就是说,它主要是由编译器提供的语法糖。这意味着每个泛型类实际上是由一个“原始类型”实现的,其中类型参数是
Object
,并且已经包含了所有方法。因此,根据类型参数,根本不可能有不同的方法。

我不会说擦除与此有关。如果有语法,编译器可以派生出这样的方法名。它只是不受支持。我不认为擦除可以排除这一点,因为它可能是一个完全编译时的东西,为了运行时的目的,它被简化为原始方法名。更不用说这个想法没有太多其他的问题。擦除与此有关-你在源代码中有一个方法
getMyBean
,在编译代码中有什么?使用
getValue
它不会编译。因此,您必须将
getMyBean
放在那里,这是具体化的,而不是擦除。在编译的代码中,您显然有一个名为
getMyBean
的方法。您不应该创建一个具有N个泛型属性的泛型holder类。用一个有用的名称和有用的字段名创建一个实际的类。我很确定它不能以您喜欢的方式使用,即使这是可能的。