Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.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版本的更新?_Java_Overriding_Compatibility_Multiple Versions - Fatal编程技术网

在自己的程序中使用什么方法来利用对未来java版本的更新?

在自己的程序中使用什么方法来利用对未来java版本的更新?,java,overriding,compatibility,multiple-versions,Java,Overriding,Compatibility,Multiple Versions,如果开发人员扩展了作为JDK一部分的Java类并向其添加了新方法,那么未来版本的Java可能会引入具有相同名称/签名的方法,从而导致在使用这些未来版本执行程序时出现不必要的行为。由于没有可用的“非重写”注释(请参阅),当有人使用较新版本的JDK编译代码时,该注释将检测到此类可能的问题,因此开发人员必须以不同的方式进行此检查。 您使用哪种方法?它是一种扩展JDK类的反模式,除了那些专门为扩展JDK类而设计的类。您应该使用Decorator模式来向JDK类添加特性。JDK也不是特例,这对任何第三方库

如果开发人员扩展了作为JDK一部分的Java类并向其添加了新方法,那么未来版本的Java可能会引入具有相同名称/签名的方法,从而导致在使用这些未来版本执行程序时出现不必要的行为。由于没有可用的“非重写”注释(请参阅),当有人使用较新版本的JDK编译代码时,该注释将检测到此类可能的问题,因此开发人员必须以不同的方式进行此检查。
您使用哪种方法?

它是一种扩展JDK类的反模式,除了那些专门为扩展JDK类而设计的类。您应该使用Decorator模式来向JDK类添加特性。JDK也不是特例,这对任何第三方库都适用。

继承是一种强大的技术,但由于缺乏知识,它可能更糟。因此,在这种情况下,您必须使用组合而不是继承。创建一个包含您想要扩展的任何java类的对象的类,然后将您的类扩展到新创建的类而不是原始类。

+1-并没有任何未来的方法可以扩展不被设计为扩展的类。最佳方法?就别这么做!具体的JDK类是java.awt.Window,具体的方法是getType()。一般来说,我同意您的意见,但在这种特殊情况下,我认为扩展窗口类是唯一的可能性。@mschenk74因为
Window
是完整GUI容器类层次结构的基础,我看不出即使您将其子类化,您将如何实现任何目标:JDK的所有其余部分仍将继续从
窗口扩展,而不是从您的自定义子类扩展。好吧,我的文本有点简短:我的意思是:我们将一个GUI类(称为ClassX)子类化,它本身就是java.awt.Window的后代。然后,窗口中的新方法getType()导致了这些问题。我们不想交换JDK窗口类,我们只想在JDK期望ClassX的地方使用我们的类?如果您可以更详细地指定用例,可能会有一些建议。问题发生在从JDK6过渡到JDK7的过程中,JDK7中引入了getType()方法。我们在扩展java.awt.Window的代码中有一些类,它们已经有了getType()方法。