为什么不推荐使用java getPeer调用?

为什么不推荐使用java getPeer调用?,java,awt,deprecated,Java,Awt,Deprecated,我正试图找到获取重量级AWT面板背景窗口X ID代码的最佳方法。为什么java.awt.Component.getPeer命令被列为不推荐使用的命令?是否涉及安全问题?javadoc声明: 从JDK 1.1版开始,程序不应直接操作对等机;替换为布尔isDisplayable() 这是一个设计问题,而不是安全问题 事实上,从Java9开始,getPeer()方法已经被删除。因此,如果您想要一个不应该使用getPeer()的有力理由,那是因为如果您使用它,您的代码将无法在Java 9上工作 如果您真

我正试图找到获取重量级AWT面板背景窗口X ID代码的最佳方法。为什么java.awt.Component.getPeer命令被列为不推荐使用的命令?是否涉及安全问题?

javadoc声明:

从JDK 1.1版开始,程序不应直接操作对等机;替换为
布尔isDisplayable()

这是一个设计问题,而不是安全问题

事实上,从Java9开始,
getPeer()
方法已经被删除。因此,如果您想要一个不应该使用
getPeer()
的有力理由,那是因为如果您使用它,您的代码将无法在Java 9上工作


如果您真的需要访问Java9中的peer,那么可以使用反射来访问包private
peer
变量。但是,使用反射深入AWT实现的风险在于,在将来的版本中,您的代码可能会(再次)中断。

AWT不是都是半弃用的吗?至于X ID,如果你在韦兰怎么办,Windows或mac?这是一个我知道肯定会在Linux上使用的程序,但我可以很容易地找到对等程序,然后检查我是否可以将其转换到各种类型的备份中。我想我的问题是,为什么这是设计决定:这似乎是一个具有有效用例的有用方法。它被弃用,现在被删除肯定是有原因的。他们认为程序直接操纵同行是件坏事。他们就是这么说的。我认为这是因为如果你访问/操作对等机,你很可能会使你的代码不可移植(例如windows vs linux),并且如果/当对等机在Java版本之间的行为发生变化时,你很可能会中断代码。