spring 如何将对象传递给问号方法[duplicate]

cld4siwp  于 2023-02-28  发布在  Spring
关注(0)|答案(1)|浏览(145)
    • 此问题在此处已有答案**:

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);
}

我无法将对象传递到服务方法。为什么以及如何解决这个问题?谢谢

nle07wnf

nle07wnf1#

Service<?>示例的process方法接受特定 * 但未知 * 类的示例。
您不能直接创建Service<?>:你必须用类型变量的具体值创建的示例。以下所有都是Service<?>的子类型:Service<Object>Service<Integer>Service<Map<String, List<Object>>>等。这些示例类型的process方法分别期望ObjectIntegerMap<String, List<Object>>
但是编译器不知道它是哪一个,所以它不允许用非空值调用process方法,因为它可能是错误类型的非空值。
您只能使用文字null调用它,这是唯一可以强制转换为任何类型的东西。

s.process(null);

如果希望能够将Object传递到process方法中,则必须使determine返回一个Service<Object>;或者从Service接口中删除类型变量,使process只接受Object

相关问题