- 此问题在此处已有答案**:
How to call method of a class with wildcard in Java?(2个答案)
5天前关闭.
public static void main(String ...args) {
Service<?> s = determine(args[0]);
//getting error here: cannot pass Object to ?
s.process(new Object());
}
static Service<?> determine(String name){
//return a service
}
interface Service<I> {
void process(I in);
}
我无法将对象传递到服务方法。为什么以及如何解决这个问题?谢谢
1条答案
按热度按时间nle07wnf1#
Service<?>
示例的process
方法接受特定 * 但未知 * 类的示例。您不能直接创建
Service<?>
:你必须用类型变量的具体值创建的示例。以下所有都是Service<?>
的子类型:Service<Object>
、Service<Integer>
、Service<Map<String, List<Object>>>
等。这些示例类型的process
方法分别期望Object
、Integer
和Map<String, List<Object>>
。但是编译器不知道它是哪一个,所以它不允许用非空值调用
process
方法,因为它可能是错误类型的非空值。您只能使用文字
null
调用它,这是唯一可以强制转换为任何类型的东西。如果希望能够将
Object
传递到process
方法中,则必须使determine
返回一个Service<Object>
;或者从Service
接口中删除类型变量,使process
只接受Object
。