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