当前位置: 首页 > 面试题库 >

Java泛型可在Eclipse中编译,但不能在javac中编译

公西翊歌
2023-03-14
问题内容

我不得不发现我的项目中有Java代码,该代码可以在Eclipse中编译并正常运行,但是会在javac中引发编译错误。

一个完整的代码段:

import java.util.HashSet;
import java.util.Set;

public class Main {

    public static void main(String[] args) {
    Set<Integer> setOfInts = new HashSet<Integer>();
    Set<Object> setOfObjects = covariantSet(setOfInts);
    }

    public static <S, T extends S> Set<S> covariantSet(Set<T> set) {
    return new HashSet<S>(set);
    }

}

javac中的编译返回:

Main.java:10: incompatible types
found   : java.util.Set<java.lang.Integer>
required: java.util.Set<java.lang.Object>
    Set<Object> setOfObjects = covariantSet(setOfInts);
                                           ^

现在,此错误阻止在Maven中构建项目。由于Eclipse编译器具有更高的容忍度,因此我现在不得不假设代码段的定义和用法如上所述,静态方法不是有效的Java吗?


问题答案:

似乎Sun的1.6 JDK无法推断正确的类型。以下内容似乎可以在我的机器上运行:

Set<Object> setOfObjects = Main.<Object, Integer>covariantSet(setOfInts);

请注意,您必须调用以类名为前缀的静态方法



 类似资料:
  • 问题内容: 注意:这是从Comparable和Comparator合约衍生出来的,涉及null 该代码可以在Eclipse(20090920-1017)中编译并正常运行 但是它不能在上编译javac 1.6.0_17。这是错误消息: 有人可以解释为什么差异吗?这是一个错误吗?如果是这样,谁有错误? 问题答案: 这是一个已确认的错误:错误ID 6468354。这是相关的摘录: 此问题是由以下事实引起

  • 问题内容: 我知道过去有一些关于在Eclipse中编译但不能在命令行中编译的问题,但是我还无法找到解决问题的答案。 特别是,我认为我可以设置eclipse以使用我的系统编译器,但这仍然不能解决问题。 我目前正在检查以下内容:“首选项-> Java->已安装的JRE”。 它仅包含一个JRE,这是我的系统之一。 这是问题的细节 我有一个Java通用类,将Enum类型作为参数,如下所示: 我在类中的某个

  • 问题内容: 抱歉,标题含糊。我有这段代码可以在Eclipse Juno(4.2)上编译,但不能在javac(1.7.0_09)上编译: 错误是: 所以问题是: 这是Bug还是Eclipse错误? 有什么办法可以在不更改方法签名的情况下进行编译(即保留通配符)? 我知道将其更改为确实可以使其编译,但是我想知道是否有办法首先避免这种情况。另外,由于内容的类型需要严格的约束,因此无法将方法更改为。 问题

  • 在下面的情况下,我在理解Java泛型的行为时遇到了问题。 具有一些参数化接口和一些类上的方法,这些类返回扩展该接口的类,由、1.8Oracle JDK、OSX和Linux生成java编译错误,但不是由Eclipse IDE中的Eclipse编译器生成的(它也可以在Eclipse RCP OSGi运行时下运行),实现如下: ./Gradlew build 最简单的修复是删除方法签名中泛型定义的一部分

  • 问题内容: 例如 当Eclipse编译Java源代码时,在哪里配置-g标志?(使用Ganymede,但我怀疑在以后的版本中已更改,因此任何答案都可能会有所帮助。) 我需要的是: -G 生成所有调试信息,包括局部变量。默认情况下,仅生成行号和源文件信息。 问题答案: 选择菜单:窗口>首选项> Java>编译器 在那里,您会在“类文件生成”标题下找到几个复选框。

  • 我从更新站点安装了JD-Eclipse,但我无法让它在Eclipse开普勒中工作。我在以前的Eclipse版本中做到了这一点,没有任何问题。 这里的问题是,当我转到Preferences>General>Editors>File associations时,*.Class文件的默认关联编辑器是“Class File Viewer(默认)(由'Java Class File'内容类型锁定)”。如果我