缺少Generic类类型的导入建议

时间:2016-08-10 18:21:03

标签: java eclipse generics

请参阅以下从Eclipse Java IDE中截取的屏幕截图:

Eclipse Quick Fix Suggestion

为什么Eclipse没有建议从paw://current.document/open?text=curl%20-X%20%22GET%22%20%22https:%2F%2Fecho.paw.cloud%2F%22%20%5C%09-H%20%22Cookie:%20sessionid%3Dvr3qftico4qeri1l21mayf40axdyidlt%22&importer=com.luckymarmot.PawExtensions.cURLImporter导入BigInteger?仅在导入java.math.BigInteger后才会显示BigInteger的导入建议。

有人可以解释这背后的原因吗?

更新

为了检查以下答案是否是原因,我尝试了这个。我创建了一个自定义java.util.List并检查了以下代码的建议。屏幕截图如下所示:

Eclipse Quick Fix Suggestion

显然,class Test<T extends MyClass>不是导入的有效候选者。 Eclipse仍然建议它。这证实了在早期的情况下,Eclipse没有保留java.math.BigInteger的导入建议来过滤导入的有效类。

1 个答案:

答案 0 :(得分:3)

我认为这背后的主要原因是Eclipse不知道List类签名(缺少更好的单词)是什么。由于您尚未导入java.util.List,因此List可能是任何内容。例如,您可以在另一个包中声明自己的List类,声明为:

public class List<T extends Double> { ... }

或类似的东西。

在这种情况下,我不认为Eclipse想知道哪个类是有效的类型参数,直到它知道你要导入哪个List

解决您的更新:

如果您的更新似乎证明了用户Susannah Potts在their comment中所说的内容:

  

这听起来像是Eclipse使用的解析器的一个方面。它看到List不存在,因此它首先标记它并且不检查类型,因为您无法创建要将类型归属的对象。

你还说:

  

显然,java.math.BigInteger不是导入的有效候选者。 Eclipse仍然建议它。这证实了在早期的情况下,Eclipse没有保留BigInteger的导入建议来过滤导入的有效类。

您的更新并未完全确认您的建议。当有效类不存在时,Eclipse可以设计为列出与给定名称匹配的所有类。例如,唯一的BigInteger类是java.math.BigInteger,也许如果你有自己的自定义BigInteger extends MyClass,在构建路径的另一个包中,那么Eclipse只会建议BigInteger类,或在java.math.BigInteger之前提出建议。

真实答案:

基本上任何事情都可能发生,甚至可能有Eclipse看到的大多数使用过的类的缓存。还有多个版本的Eclipse,每个版本都可能表现出不同的行为。获得有效答案的唯一方法是,如果您联系正在使用的Eclipse版本的创建者并询问他们。