0

在下面的代码段中,问号允许您做什么,因为它位于类类型的尖括号中?它是否允许任何类类型作为参数传入?

另外,方法1返回什么?它是否返回一个可以转换为ObjectService类型的对象?

方法一

public Object getInstance(Class<?> clazz) {
    if (org.service.ObjectService.class.equals(clazz))
        return getObjectService();
    return null;
}

方法二

public ObjectService getObjectService() {
    ObjectService service;

    service = (ObjectService) context.getBean("ObjectService");

    return service;
}
4

1 回答 1

1

它告诉编译器接受任何类型的 Class 作为参数。基本上,这种方式你选择关闭编译器的类型检查。或者,您可以<?>完全省略编译器警告或按照 Luiggi 的建议并指定Class<Object>,但这并不总是相同的。

如果您的泛型类定义有限制,则<Object>不是可接受的参数。

例如,如果您在某处有以下课程:

public class TheClass<T extends Component> {
}

你不能这样做TheClass<Object>。您可以执行TheClass<Component>or TheClass<?>,这与 TheClass 案例基本相同。


更新以回答更新的问题

在您的情况下,getInstance() 将遵循 getObjectService(),它只能返回 ObjectService。您一定会收到以下其中一项:

  • 对象服务实例。
  • 无效的。
  • 来自方法 getObjectService() 的 ClassCastException,其中执行转换。
于 2013-02-27T19:51:46.270 回答