Java 如何向参数化方法提供参数,其类型我不知道';直到运行时我才知道?

Java 如何向参数化方法提供参数,其类型我不知道';直到运行时我才知道?,java,generics,casting,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); } 。。。 执行人 但我知道数据的类型与exe

在此代码段中:

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

executor.execute(data);
...

interface Executor<T extends Data> {
    void execute(T data);
}
。。。
执行人
但我知道数据的类型与executor的相同
参数化类型

如果你确定,你可以写:

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

Executor<Data> executorData = (Executor<Data>)executor;

executorData.execute(data);

executor您的代码有什么问题?您希望在哪里强制转换?代码没有编译:
类型执行器中的方法execute(capture#4-of?extends Data)不适用于参数(Data)
很难准确地说出您的要求,但在类似情况下通常的方法是使用类变量。这
是另一回事
,它的类型参数化了吗?@chrylis:简而言之,上面的代码段是一个编译错误,因为编译器不知道
数据
t
的类型相同。那么如何避免编译错误呢?
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));