2013-05-02 132 views
1

這些是使用Java創建「代表」的簡單方法:如何將泛型類型限制爲不擴展類?

public static <B> Runnable runnableOf(B o, String methodName) { 
    return findMethod(methodName, o.getClass(), o); 
} 
public static <B> Runnable runnableOf(Class<B> base, String methodName) { 
    return findMethod(methodName, base, null); 
} 

有兩種情況在這段代碼:當B(類的調用方法)不是Class<?>,用戶應通過一個實例的B,因此該方法將是一個實例方法。否則,用戶可以通過一個Class<B>來調用靜態方法。

但是,編譯器抱怨他們不明確。我認爲解決方案之一是在第一次過載時強制B不是Class<?>的實例。我該怎麼做?

UPDATE

上述代碼的解決方案在我自己的答案給出。但是它並沒有回答標題中的問題。我希望任何人都可以回答它,並給出另一個有意義的例子。

+0

什麼是您的編譯器版本。 Eclipse編譯器沒有抱怨 – Jatin 2013-05-02 06:32:11

+0

Java 6,而不是Java 7. – 2013-05-02 06:32:40

+0

Java 6 SE和Eclipse JDT編譯器都沒有抱怨 – 2013-05-02 06:32:44

回答

0

對不起,這是一個錯誤。問題是findMethod不知道什麼是null的類型。因此,解決方法是如下:

public static <B> Runnable runnableOf(Class<B> base, String methodName) { 
    return findMethod(methodName, base, (B)null); 
} 

我不知道天氣或沒有人可以做我的標題描述,但是在我的例子是不練琴。