java - 作为Java中的方法参数,问号允许你在Class<?>中做什么

标签 java spring gwt

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

另外,方法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/

相关文章:

java - Rest API 资源包含点,最后一部分被截断

java - Spring Boot App 打包成 jar 后不提供静态资源

javascript - BigDecimal 在 GWT 编译的 JavaScript 中是如何表示的

java - 从 Java 程序获得意外输出时的困惑

java - 运行使用Gradle中的java.io.Console API的应用程序

java - 在 Java 中使用类依赖关系构建图形的工具

java - 谷歌 AdMob java.lang.NoClassDefFoundError : com. google.android.gms.ads.AdView

java - 如何使用 spring-boot 创建 REST 服务?

java - 在没有可用源代码的情况下编译 GWT 项目

java - 如何使用特定区域设置在 GWT 中将字符串转换为 double ?