使用下面的代码段,问号允许您执行什么操作,因为它位于类类型的尖括号中?它是否允许任何类类型作为参数传入?
另外,方法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>
这不是一个可接受的参数。
例如,如果您在某处有以下类(class):
public class TheClass<T extends Component> {
}
你不能这样做TheClass<Object>
。你可以做TheClass<Component>
或TheClass<?>
,这与 TheClass 案例本质上是相同的。
更新以回答更新的问题
在您的情况下,getInstance() 将遵循 getObjectService(),后者只能返回 ObjectService。您一定会收到以下其中一项:
- ObjectService 实例。
- 空。
- 来自方法 getObjectService() 的 ClassCastException(在该方法中执行转换)。
关于java - 作为Java中的方法参数,问号允许你在Class<?>中做什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15120957/