我正在尝试通过枚举来实现访问者模式,以检查类对象是否是某种类型,以及它是否返回某个字符串。我遇到的问题是尝试创建一组类对象而不依赖于原始类型。问题当然是Set
和Class
都是不可重复的类型。我可以使用raw(因为感谢类型擦除,这是编译器正在做的事情)但我想知道是否有办法用泛型做到这一点。以下是我的内容(DateTrackedVersionedEntity
是User
的超级类型):
public static enum MissingDataKeyType {
USER {
@Override
public <T extends DateTrackingVersionedEntity> Set<Class<T>> correspondingClasses() {
return Collections.singleton(User.class);
}
}
//rest of code here
public abstract <T extends DateTrackingVersionedEntity> Set<Class<T>> correspondingClasses();
}
我尝试使用?
而不是T
,但没有骰子 - 我总是得到一个关于如何Set<Class<User>>
无法转换为Set<Class<T>>
的编译器错误。有没有办法在没有原始类型的情况下解决这个问题?
显然,不可能,只需忽略原始类型并使用Set<Class<? extends Class>>