Java通用用法问题

Java通用用法问题,java,generics,Java,Generics,比如说我想做点什么 public class Container<C extends Member> { public void foo() { C newC = new C(); } } 公共类容器{ 公共图书馆{ C newC=新的C(); } } 我意识到这是行不通的,但正确的Java习惯用法是什么?典型的习惯用法是生成传入构造函数的类型标记: public class Container<C extends Member> {

比如说我想做点什么

public class Container<C extends Member> {

    public void foo() {
        C newC = new C();
    }
}
公共类容器{
公共图书馆{
C newC=新的C();
}
}

我意识到这是行不通的,但正确的Java习惯用法是什么?

典型的习惯用法是生成传入构造函数的类型标记:

public class Container<C extends Member> {
    private Class<C> tag;

    public Container(Class<C> tag) {
        this.tag = tag;
    }

    public void foo() {
        C newC = tag.newInstance();
    }
}
公共类容器{
私有类标签;
公共容器(类标签){
this.tag=tag;
}
公共图书馆{
C newC=tag.newInstance();
}
}

典型的习惯用法是生成传入构造函数的类型标记:

public class Container<C extends Member> {
    private Class<C> tag;

    public Container(Class<C> tag) {
        this.tag = tag;
    }

    public void foo() {
        C newC = tag.newInstance();
    }
}
公共类容器{
私有类标签;
公共容器(类标签){
this.tag=tag;
}
公共图书馆{
C newC=tag.newInstance();
}
}

泛型类型C在运行时被擦除为java.lang.Object。无法实例化已擦除的泛型类型。看起来你更想要某种工厂创作模式

abstract class MemberFactory {
   public static <T> Member create(Class<T> memberClass) throws Exception {
      return memberClass.newInstance();
   }
}

Member premiumMember = MemberFactory.create(PremiumMember.class);
抽象类成员工厂{
公共静态成员创建(类memberClass)引发异常{
返回memberClass.newInstance();
}
}
成员premiummber=MemberFactory.create(premiummber.class);

如果是这种情况,您可能需要考虑使用依赖项注入和Spring或Guice之类的框架。

在运行时将泛型C擦除为java.lang.Object。无法实例化已擦除的泛型类型。看起来你更想要某种工厂创作模式

abstract class MemberFactory {
   public static <T> Member create(Class<T> memberClass) throws Exception {
      return memberClass.newInstance();
   }
}

Member premiumMember = MemberFactory.create(PremiumMember.class);
抽象类成员工厂{
公共静态成员创建(类memberClass)引发异常{
返回memberClass.newInstance();
}
}
成员premiummber=MemberFactory.create(premiummber.class);

如果是这种情况,您可能想看看使用依赖项注入和Spring或Guice之类的框架。

我不知道您的示例中给出了什么“this”。你能用不同的方式描述这个问题吗?我不确定我是否理解你举的例子中的“这”是什么。你能用不同的方式描述这个问题吗?