作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想创建一个具有两个简单方法的类 - 第一个方法注册需要处理的类型。第二个将处理所有已注册的类型。我遇到的问题是我想要注册/处理的类有一定的限制 - 它们必须是实现和接口(interface)的枚举
我不太清楚如何定义将用于存储注册类型的集合。我的代码的简化版本是:
public class Example {
interface MyType {
// Add methods here
}
private List<what-goes-here?> store = new ArrayList<>();
public <T extends Enum<?> & MyType> void registerType(@Nonnull Class<T> type) {
store.add(type);
}
public void processAll() {
for (T t : store) { // Where do I define T?
// process t
}
}
}
最佳答案
这个怎么样?
public class Example {
interface MyType {
// Add methods here
}
// v--- save it as enum class
private List<Class<? extends Enum<?>>> store = new ArrayList<>();
public <T extends Enum<?> & MyType> void registerType(@Nonnull Class<T> type) {
store.add(type);
}
public void processAll() {
// v--- iterate each enum type
for (Class<? extends Enum<?>> type : store) {
Enum<?>[] constants = type.getEnumConstants();
for (Enum<?> constant : constants) {
//v--- downcasting to the special interface
MyType current = (MyType) constant;
// TODO
}
}
}
}
关于generics - Java : How to define a collection of Enums that implements an interface,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45235505/
我是一名优秀的程序员,十分优秀!