2010-10-27 36 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做正确的事的用户,但它是最有可能做的正确的事情。