Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我是否应该@Deprecate一个超类方法?_Java_Oop_Inheritance_Overriding_Deprecated_Facade - Fatal编程技术网

Java 我是否应该@Deprecate一个超类方法?

Java 我是否应该@Deprecate一个超类方法?,java,oop,inheritance,overriding,deprecated,facade,Java,Oop,Inheritance,Overriding,Deprecated,Facade,假设我正在扩展JFileChooser并制作一个易于使用的版本,我称之为SimpleFileChooser 它的结构可以是DIALOG\u TYPE\u OPEN或DIALOG\u TYPE\u SAVE-因此,JFileChooser的showOpenDialog和showSaveDialog方法是多余的。我将它们替换为一个名为showDialog的方法,该方法返回一个布尔值,但这正是我陷入困境的地方: 我是否应该覆盖打开/保存方法并将@Deprecated标记添加到 这样API用户就知道它们

假设我正在扩展JFileChooser并制作一个易于使用的版本,我称之为SimpleFileChooser

它的结构可以是DIALOG\u TYPE\u OPEN或DIALOG\u TYPE\u SAVE-因此,JFileChooser的showOpenDialog和showSaveDialog方法是多余的。我将它们替换为一个名为showDialog的方法,该方法返回一个布尔值,但这正是我陷入困境的地方:

我是否应该覆盖打开/保存方法并将@Deprecated标记添加到 这样API用户就知道它们已经被取代了?那会吗 违反注释的

或者文档中的通知就足够了吗?如果是的话,我们应该去哪里 此通知应放置在:类摘要中或覆盖的 方法?我应该首先重写这些方法吗


提前感谢。

我认为您实际上是在构建一个简化版的现有API。因此,您应该使用组合而不是继承。将原始JFileChooser隐藏在新类中,并提供更简单的API


作为最后一种手段,如果其他代码需要,您可以提供公共JFileChooser getRaw方法来访问包装对象

@Deprecated表示您不应再使用该特定类或方法,因为它将在将来被删除。该注释就是为此而设计的。
因此,简单地说,如果您不希望API用户再使用该方法,您应该使用@Deprecated。否则,最终用户仍将使用您在未来构建中删除的方法/类,而他们的项目在更新时将被破坏。

在设计中做有意义的事情,而不是追求某种本体论纯度的假设理想。我会使用@Deprecated,因为它清楚地传达了您不应该使用此方法的信息,并使其成为编译器警告。也就是说,这不是建设性的,因为这两个变体都有理由这样做,而没有太多的客观原因,或者至少是偏离主题。也许吧,我同意。他的类的实例将是JFileChooser的实例,所以它们应该能够替换它们,所以这些方法应该可以工作,而不仅仅是被弃用。如果他想要一些JFileChooser功能,他可以围绕JFileChooser构建一个包装器并选择它的API。