嗨我正在写报告系统,并希望使最终用户指定类型,如果他扩展我的课程。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
这可能吗?
嗨我正在写报告系统,并希望使最终用户指定类型,如果他扩展我的课程。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
这可能吗?
class B extends A // Compile error
不,为了向后兼容,Java中的泛型是可选的。你不能强迫程序员使用它们。这只会产生一个警告(“不要使用原始类型”)。
class B extends A<D> // compile error
如果他们确实使用泛型,他们必须是正确的,但。在D与规范不匹配的情况下,这将是编译器错误。
@Thilo是对的。
我只想补充一点,尝试强迫人们以特定方式使用您的课程是个坏主意。他们可能有充分的理由以不同的方式使用你的代码。如果您尝试强制使用某种特定的使用模式,最终可能会导致人们使用可怕的黑客攻击您的课程,或者简单地离开并实施自己的课程。
这是您的IDE或外部质量管理工具(如Findbugs)的工作。您可以将Eclipse配置为将unchecked
警告视为错误(您也可以对大多数IDE执行相同的操作)。或者您可以配置Findbugs,使您的构建在相同类型的错误中失败。
是,这些解决方案留下责任到您的API做正确的事的用户,但它是最有可能做的正确的事情。