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

eclipse编译器或javac中的错误(“无法确定T的类型参数”)

卫念
2023-03-14
问题内容

以下代码

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();
    }
}

在eclipse中编译,但不能使用javac编译(无法确定T的类型参数;对于具有上限T,java.lang.Object的类型变量T,不存在唯一的最大实例)。

当我将readObject(String file)更改为

    @SuppressWarnings("unchecked")
    public static <T> T readObject(String file) throws Exception {
        return (T)readObject(new ObjectInputStream(new FileInputStream(file)));
    }

它可以在eclipse和javac中进行编译。谁是正确的,eclipse编译器还是javac?


问题答案:

我会说这是在此处和此处报告的Sun编译器中的错误,因为如果将行更改为下面的行,则这两者都可以使用,这似乎正是错误报告中所描述的。

return GenericsTest2.<T>readObject(new ObjectInputStream(new FileInputStream(file)));


 类似资料:
  • null 无法定位tools.jar。应该在/usr/lib/jvm/java-7-openjdk-amd64/lib/tools.jar中找到它 buildfile:/home/taylor/desktop/java/tcp/build.xml 构建-子项目:

  • 我正在开发一个代理适配器,使用Java中的泛型将一个请求/响应转换为另一个请求/响应。 我有一个接口: 适配器的实现(仅以请求案例为例): 抽象类: 从Java中的泛型类型推断泛型类型(编译时错误) 我在那个问题上花了大约三天时间。有什么想法吗?谢了。

  • 问题内容: 我试图得到以下消息: 好吧,有一个开放的jdk,我也下载了另一个。我尝试将JAVA_HOME指向两者,现在已设置: 我还尝试选择其中一种打开方式,但是其中的不同jdk版本出现相同的错误。 我该如何解决?提前致谢。 问题答案: 似乎您的PATH未正确选择…“ echo $ PATH”的输出是否包含javac所在的目录?我建议如下: 打开终端并执行: 如果javac -version仍然不

  • 我刚开始学习Java,并在我的计算机上安装了JDK,但现在我正在尝试最简单的Java,而不是编译。我在C:/Java/jdk7上安装了JDK。 每当我尝试编译时,都会出现一个错误: 以下是我的编译过程: 我还尝试了: 我不知道我的代码是不是错了,但这是我的测试。java: 以下是JAVA_HOME: 任何帮助都将不胜感激!

  • 问题内容: 第14行发生了错误。 线程“主”中的异常java.lang.RuntimeException:无法编译的源代码-错误的sym类型: 很难找到解决方案。 问题答案: 您提供的代码在我的计算机上运行良好。 我猜您正在使用Netbeans,并且可能会受到错误的影响。试试这个: 打开项目属性,选择Build-Compiling,取消选中“保存时编译”,然后重新运行应用程序。这样可以确保在运行之

  • 问题内容: 我在Java编译器中遇到一个错误,该错误中提交用于编译的文件顺序可能导致代码无法编译。我对代码进行了深入研究,以找出可以重现该问题的最小代码量,从而生成了三个源文件(每个源文件一个类)。 通过以特定顺序使用javac参数可以重现该问题。简而言之,为了成功,必须始终在使用该Actions类的Program类之前对其进行编译,否则javac不能以一种明智的方式对其进行处理: 发生编译错误时