首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >eclipse编译器或javac中的错误(“无法确定T的类型参数”)

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

Stack Overflow用户
提问于 2008-11-24 15:59:15
回答 5查看 26.3K关注 0票数 74

下面的代码

代码语言:javascript
复制
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(字符串文件)更改为

代码语言:javascript
复制
    @SuppressWarnings("unchecked")
    public static <T> T readObject(String file) throws Exception {
        return (T)readObject(new ObjectInputStream(new FileInputStream(file)));
    }

它在eclipse和javac中编译。eclipse编译器和javac谁是对的?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2008-12-02 23:40:00

我会说这是Sun编译器报告的herehere中的错误,因为如果您将行更改为下面的一行,它将同时适用于这两个行,这似乎正是错误报告中所描述的。

代码语言:javascript
复制
return GenericsTest2.<T>readObject(new ObjectInputStream(new FileInputStream(file)));
票数 66
EN

Stack Overflow用户

发布于 2008-11-24 16:48:55

在这种情况下,我认为您的代码是错误的(而Sun编译器是正确的)。在readObject的输入参数中没有任何实际推断类型T的内容。在这种情况下,最好让它返回Object,并让客户端手动转换结果类型。

这应该可以工作(尽管我还没有测试过它):

代码语言:javascript
复制
public static <T> T readObject(String file) throws Exception {
    return GenericsTest2.<T>readObject(new ObjectInputStream(new FileInputStream(file)));
}
票数 13
EN

Stack Overflow用户

发布于 2011-03-29 20:45:08

Oracle JDK6 u22应该是正确的,但我使用JDK6 u24也遇到了这个问题

这是eclipse bug 98379的一个错误。

这个问题没有得到纠正,但是这个问题可以通过类似于eclipse but中的例子(参见链接)来解决。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/314572

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档