2010-10-16 57 views
0

说我想要做这样的事情Java的泛型的使用问题

public class Container<C extends Member> { 

    public void foo() { 
     C newC = new C(); 
    } 
} 

我意识到,这是不行的,但什么是正确的Java成语呢?

+0

我不确定我是否明白“this”是什么给你的例子。你能否用不同的方式描述这个问题 – Manius 2010-10-16 17:18:52

回答

1

典型成语indroducing在构造传递的类型标签:

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(); 
    } 
} 
2

通用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); 

如果是这种情况,您可能需要查看使用依赖注入和Spring或Guice等框架。