2010-10-16 70 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等框架。