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

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

方法1

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


方法2

public ObjectService getObjectService() {
    ObjectService service;

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

    return service;
}

最佳答案

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

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

例如,如果您在某个地方有以下课程:

public class TheClass<T extends Component> {
}


您不能执行TheClass<Object>。您可以执行TheClass<Component>TheClass<?>,这与TheClass情况基本相同。



更新答案更新的问题

您的案例中的getInstance()将服从于getObjectService(),后者只能返回ObjectService。您一定会收到以下内容之一:


ObjectService实例。
空值。
方法getObjectService()的ClassCastException,在其中执行强制转换。

09-27 06:31