在下面的代码段中,问号允许您做什么,因为它在类类型的尖括号中?是否允许任何类类型作为参数传递?
另外,方法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,在其中执行强制转换。