在此代码段中:
...
Executor<? extends Data> executor = someOtherThing.getExecutor();
Data data = someOtherOtherThing.getData();
executor.execute(data);
...
interface Executor<T extends Data> {
void execute(T data);
}
因此executor
和data
都来自其他地方,直到运行时我才知道它们的实际类型,但我确实知道{{1}的类型}与data
的参数化类型executor
相同。
我假设需要某种类型的强制转换来允许T
,但我不知道要投射到什么或如何做,而不知道确切的类型直到运行时。我怎样才能做到这一点?
谢谢!
答案 0 :(得分:2)
但我知道数据类型与执行者相同 参数化类型,T
如果您确定,可以写:
Executor<? extends Data> executor = someOtherThing.getExecutor();
Data data = someOtherOtherThing.getData();
Executor<Data> executorData = (Executor<Data>)executor;
executorData.execute(data);
适用于
List<? extends Number> list = new ArrayList<>();
List<Number> listNumbers = (List<Number>) list; //Unchecked cast: 'java.util.List<capture<? extends java.lang.Number>>' to 'java.util.List<java.lang.Number>
listNumbers.add(new Integer(1));