仅弃用类继承

我想使用@Deprecated注释仅弃用给定类的扩展,而不是弃用类中包含的所有方法和字段。 也就是说,如果扩展给定的类将发生警告 - 但对方法或字段的引用不会触发警告。已经有几个类扩展了这个类,我想让弃用警告针对这些客户端 - 我还不能破坏它们(但它们可以重新编译 - 不需要ABI兼容性)。 是否有可能在Java 1.6(JDT编译器)?     
已邀请:
两个考虑 1)该类可能已经扩展,因此不要将其标记为最终,否则可能会破坏向后兼容性。 2)你不希望课程扩展,所以应该标记为final。 我认为你应该做的是用新类扩展旧类,标记旧类被弃用,并声明新类final。在新类中,您可以添加@SuppressWarning标记来安排已弃用的消息,然后您应该进行清理编译。 使用旧类的代码将获得@Deprecated警告,但仍将编译..使用新类的代码将干净地编译。对您的用户而言是一种“强烈建议”,而不是向后兼容的中断,并且由于API 100%兼容,因此很容易修复。     
我怀疑使用
@Deprecated
注释是否可行。 如果您可以控制源,则可以执行以下操作: 将当前班级
SomeClass
重命名为
SomeClassSuper
创建一个名为
SomeClass
的新类,让它扩展为
SomeClassSuper
。 使
SomeClass
最终(这会阻止客户扩展它)。 那就是去吧
class SomeClass {
    // ...
}

class SubClass extends SomeClass {
    // ...
}
class SomeClassSuper {
    // ...
}

class SubClass extends SomeClassSuper {
    // ...
}

final class SomeClass extends SomeClassSuper {
    // ...
}
    
不,没办法。你可以上课
final
,但是你将破坏现有的扩展。 也许通过为APT开发定制处理器是可能的。但在一般情况下不会强制执行。     
如果它适合您的设计,您可以使所需的功能(例如,后代需要访问的构造函数)为private,并提供受保护的+弃用的构造函数,扩展需要使用它们。     
@Deprecated注释不支持此功能,您应该将您的班级标记为
final
。虽然这会导致编译器错误,但它更符合逻辑,或者扩展类是安全的,或者执行它是错误的。     

要回复问题请先登录注册