当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《eclipse编译器或javac中的错误("T的类型参数无法确定")》经验,为你挑选了2个好方法。

以下代码

public class GenericsTest2 {

    public static void main(String[] args) throws Exception {
        Integer i = readObject(args[0]);
        System.out.println(i);
    }

    public static  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 readObject(ObjectInputStream stream) throws Exception {
        return (T)stream.readObject();
    }
}

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

当我将readObject(String文件)更改为

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

它在eclipse和javac中编译.谁是正确的,eclipse编译器还是javac?



1> Fabian Steeg..:

我说这是Sun编译器在这里和这里报告的错误,因为如果你将你的行更改为下面的那一行,它就可以兼顾两者,这似乎正是错误报告中描述的内容.

return GenericsTest2.readObject(new ObjectInputStream(new FileInputStream(file)));



2> Chris Jester..:

在这种情况下,我会说你的代码是错误的(Sun编译器是对的).输入参数中没有任何内容readObject可以实际推断出类型T.在这种情况下,最好让它返回Object,并让客户端手动转换结果类型.

这应该工作(虽然我还没有测试过):

public static  T readObject(String file) throws Exception {
    return GenericsTest2.readObject(new ObjectInputStream(new FileInputStream(file)));
}

推荐阅读
谢谢巷议
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有