Java泛型类型转换拼图(Java Generics type conversion puzzle)

2019-09-17 04:45发布

我试图使用谷歌的番石榴ImmutableSet类来创建一个类时属性(java.util.Date和org.joda.time.DateTime)一套一成不变的类的。

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

我彻底难倒了,为什么我得到这个编译器错误(Java 1.6的在Eclipse)。

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的泛型多重继承的是我只是缺少一个方法是什么?

Answer 1:

基本上,编译器试图将智能为您服务。 它的工作了一些边界你,并试图使用它们的返回类型of

幸运的是,你可以通过被明确解决它:

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

&部分有效的语法-这是你如何指定多种类型,例如边界

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

这意味着你可以只对指定类型的T它们实现Serializable Comparable<T>



文章来源: Java Generics type conversion puzzle