2010-10-27 63 views
2

嗨我正在寫報告系統,並希望使最終用戶指定類型,如果他擴展我的課程。Java。如何禁止使用原始泛型類型?

class A <T extends C> 
{...} 

class B extends A // Compile error 
{...} 

class B extends A<D> // Compile error 
{...} 

class B extends A<C> // Success 

這可能嗎?

回答

5
class B extends A // Compile error 

不,爲了向後兼容,Java中的泛型是可選的。你不能強迫程序員使用它們。這隻會產生一個警告(「不要使用原始類型」)。

class B extends A<D> // compile error 

如果他們確實使用泛型,他們必須是正確的,但。在D與規範不匹配的情況下,這將是編譯器錯誤。

2

@Thilo是對的。

我只想補充一點,嘗試強迫人們以特定方式使用您的課程是個壞主意。他們可能有充分的理由以不同的方式使用你的代碼。如果您嘗試強制使用某種特定的使用模式,最終可能會導致人們使用可怕的黑客攻擊您的課程,或者簡單地離開並實施自己的課程。

0

這是您的IDE或外部質量管理工具(如Findbugs)的工作。您可以將Eclipse配置爲將unchecked警告視爲錯誤(您也可以對大多數IDE執行相同的操作)。或者您可以配置Findbugs,使您的構建在相同類型的錯誤中失敗。

是,這些解決方案留下責任到您的API做正確的事的用戶,但它是最有可能做的正確的事情。