以下代码
public class GenericsTest2 {
public static void main(String[] args) throws Exception {
Integer i = readObject(args[0]);
System.out.println(i);
}
public static <T> T readObject(String file) throws Exception {
return readObject(new ObjectInputStream(new FileInputStream(file)));
// closing the stream in finally removed to get a small example
}
@SuppressWarnings("unchecked")
public static <T> T readObject(ObjectInputStream stream) throws Exception {
return (T)stream.readObject();
}
}
Run Code Online (Sandbox Code Playgroud)
在eclipse中编译,但不在javac中编译(T的类型参数无法确定;对于具有上限T,java.lang.Object的类型变量T,不存在唯一的最大实例).
当我将readObject(String文件)更改为
@SuppressWarnings("unchecked")
public static <T> T readObject(String file) throws Exception {
return (T)readObject(new ObjectInputStream(new FileInputStream(file)));
}
Run Code Online (Sandbox Code Playgroud)
它在eclipse和javac中编译.谁是正确的,eclipse编译器还是javac?
我注意到Eclipse IDE(用于Java,版本3.5.1)使用它自己的java编译器,但我找不到如何更改它.它甚至可能吗?
也许这有点琐碎,但经过多年使用IntelliJ IDEA后,我觉得回到Eclipse有点尴尬.
谢谢.
更新:由于要求更详细的解释,我正在这样做.
所以,最近我正在帮助一些Java开发人员,并注意到他正在使用没有Sun的JDK的Eclipse.从公司范围开始,我们只使用Sun的JDK,我觉得它很奇怪.
看起来他只有Eclipse,并且不需要额外的工具来编译java代码(比如javac).这是因为Eclipse捆绑了自己的编译器(有关详细信息,请查看此内容).
我发现这个功能非常好,我相信这有很好的理由.但我希望我们所有的公司开发人员使用相同的编译器来生成java字节码(.class文件).并在相同的JVM中运行它.只是为了拥有尽可能统一的环境并消除其他特定于环境的问题.我在Eclipse中指定JRE没有问题.
但我没有找到如何将默认Java编译器更改为javac.另一方面,我的主要IDE IntelliJ IDEA允许这样做(在javac,jikes或eclipse编译器之间进行选择).所以我只是想知道Eclipse中是否可以实现.
另外: