如何为参数化方法提供参数,参数化方法的类型在运行时之前我不知道?

时间:2015-01-22 11:32:38

标签: java generics casting

在此代码段中:

...
Executor<? extends Data> executor = someOtherThing.getExecutor();
Data data = someOtherOtherThing.getData();

executor.execute(data);
...

interface Executor<T extends Data> {
    void execute(T data);
}

因此executordata都来自其他地方,直到运行时我才知道它们的实际类型,但我确实知道{{1}的类型}与data的参数化类型executor相同。

我假设需要某种类型的强制转换来允许T,但我不知道要投射到什么或如何做,而不知道确切的类型直到运行时。我怎样才能做到这一点?

谢谢!

1 个答案:

答案 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));
相关问题