似乎我再次陷入java泛型.这是我有的:
几堂课:
class CoolIndex implements EntityIndex<CoolEntity>
class CoolEntity extends BaseEntity
枚举使用上面的类:
enum Entities {
    COOL_ENTITY {
        @Override
        public <E extends BaseEntity, I extends EntityIndex<E>> Class<I> getIndexCls() {
            return CoolIndex.class;
        }
        @Override
        public <E extends BaseEntity> Class<E> getEntityCls() {
            return CoolEntity.class;
        }
    }
    public abstract <E extends BaseEntity, I extends EntityIndex<E>> Class<I> getIndexCls();
    public abstract <E extends BaseEntity> Class<E> getEntityCls();    
}
函数我需要使用getIndexCls()函数调用的结果调用:
static <E extends BaseEntity, I extends EntityIndex<E>> boolean isSomeIndexViewable(Class<I> cls)
问题是编译器抱怨return CoolIndex.class;并且return CoolEntity.class;我不清楚为什么......当然我可以把它投入 …
假设您有一个通用接口:
public interface MyInterface<T> {
    T doSomething();
}
是否有可能声明一个实现的枚举MyInterface<T>,但每个枚举常量为哪个实现它的不同值T?也就是说,鉴于此枚举:
public enum MyEnum {
    FOO,
    BAR,
    BAZ;
}
我们可以更改它,以便FOO实现MyInterface<Integer>,BAR实现MyInterface<String>和BAZ实现MyInterface<List<MyOtherType>>,并使它成为MyEnum整体实现MyInterface<?>?这样做是完全可行的,因此它可能是以类型安全的方式完成的.