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