【问题标题】:Toolkit returns references to proprietary Sun APIs?Toolkit 返回对专有 Sun API 的引用?
【发布时间】:2010-07-09 13:28:39
【问题描述】:

我刚刚将我们的项目升级到 JDK 1.6,在编译时,我有一个测试类,它实现了 java.awt.Toolkit 并实现了不做任何特殊的方法(除了捕获对 beep 命令的调用)。

(这是一个旧测试,可能应该以多种方式重写(模拟它或将该功能包装在一个简单的界面中。但是,无论测试的坏处如何)编译器现在会吐出一堆警告,例如这个:

[19:50:10]: [javac] MemoryManagerTest.java:14: 警告:java.awt.dnd.peer.DragSourceContextPeer 是 Sun 专有 API,可能会在未来的版本中删除 [19:50:10]:[javac] 导入 java.awt.dnd.peer.DragSourceContextPeer

首先有趣的是,带有名为 java.awt.dnd.peer 的包的东西将是 sun 专有的 API(尽管显然实现是),但这个消息是假的,还是真的是真的?如果这是真的,那么这对与这些接口相关联的整个 Toolkit 类有何说明?

【问题讨论】:

  • 另见Component.getPeer
  • @Tom,既然他们不希望你直接操纵对等点,他们就让它们不属于官方 API?
  • 这是 1.00 的结果。

标签: java compiler-warnings jdk1.6


【解决方案1】:

您可以检查 API 文档并发现 java.awt.dnd.peer 中没有列出任何类,因此特定于 Sun VM 的实现。即使 Toolkit 类本身是公共 API 的一部分,该类的实现当然也是特定于 VM 的,并且可能使用其他专有的 Sun 内部类。

【讨论】:

  • 静态引用非公共 API 的公共 API 不是公共 API,是吗?顺便说一句,我很少使用公共 javadocs,因为我的 IDE 只是从源代码中读取 javadoc cmets。
  • “静态引用”是什么意思?
  • @jarnbjo,通过在公共 API 的返回方法中对作为专有 API 的一部分的接口进行静态引用,这是一个静态引用,如果它在运行时会抛出错误不在那里。因此,如果不引用私有 API,就无法实现公共 API。
猜你喜欢
  • 1970-01-01
  • 2022-08-22
  • 2016-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多