【问题标题】:Java Generics type conversion puzzleJava 泛型类型转换难题
【发布时间】:2012-05-12 01:17:51
【问题描述】:

我正在尝试使用 Google 的 Guava ImmutableSet 类创建一组具有类时间属性(java.util.Date 和 org.joda.time.DateTime)的不可变类。

private static final ImmutableSet<Class<?>> timeLikeObjects = ImmutableSet.of(Date.class, DateTime.class);

我完全不知道为什么会出现此编译器错误(Eclipse 中的 Java 1.6)。

Type mismatch: cannot convert from ImmutableSet<Class<? extends Object&Serializable&Comparable<? extends Comparable<?>>>> to ImmutableSet<Class<?>>

请注意,这是可行的:

private static final ImmutableSet<?> timeLikeObjects = ImmutableSet.of(Date.class, DateTime.class);

但是我显然丢失了 timeLikeObjects 类型的通用描述的一部分。

我从未在通用描述中遇到 & 符号,而且它似乎不是有效的语法。

有没有办法在我刚刚遗漏的 Java 泛型中指定多重继承?

【问题讨论】:

    标签: java generics guava


    【解决方案1】:

    基本上,编译器正在努力为您提供智能。它为您制​​定了一些界限,并尝试将它们用于of 的返回类型。

    幸运的是,您可以通过明确的方式解决它:

    private static final ImmutableSet<Class<?>> timeLikeObjects =
        ImmutableSet.<Class<?>>of(Date.class, DateTime.class);
    

    &amp; 部分有效的语法 - 它是您为多种类型指定边界的方式,例如

    public class Foo<T extends Serializable & Comparable<T>>
    

    这意味着您只能为实现SerializableT 指定类型 Comparable&lt;T&gt;

    【讨论】:

    • 乔恩这是一个非常有启发性的回应。你的解决方案完美无缺。谢谢! :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多