【问题标题】:Generic type class defition泛型类定义
【发布时间】:2012-02-04 02:23:00
【问题描述】:

generics here有一个很好的讨论

但他们都在谈论类如何接受泛型类型变量。我的问题是关于泛型类型类的定义。

类被定义为

protected final <T> T getBeanFromSpringContext(String name, Class<T> requiredType) {
    if(springApplicationContext != null) {
        return springApplicationContext.getBean(name, requiredType);
    } else {
        return null;
    }
}

现在我知道返回类型是T。但是之前的&lt;T&gt;是这个Class对象所建模的类的类型。为什么这不是&lt;?&gt;,因为我不知道类型?

因为返回类型是T。这个类可以像上面提到的那样返回null吗?

【问题讨论】:

  • 顺便说一句,我更喜欢这种单行样式:return springApplicationContext == null ? null : springApplicationContext.getBean(name, requiredType);

标签: java class templates generics variables


【解决方案1】:

之前的&lt;T&gt;是一个声明,表示该方法是泛型的,并且它有一个类型参数T——也就是说,它是一个definition of a type variable

可能有点不同:

protected final <T extends Collection> T getBeanFromSpringContext(String name, Class<T> requiredType) {
    if(springApplicationContext != null) {
        return springApplicationContext.getBean(name, requiredType);
    } else {
        return null;
    }
}

这不仅意味着您有一个类型参数,而且还会对其值施加一些约束,即“界限”。

更新:现在,在 null 部分。不幸的是,所有非原始类型在 Java 中都意味着“这种类型或null”。所以是的,你总是可以返回 null。而且你总能获得 NPE。

An obligatory Angelika Langer's FAQ link

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-21
    • 1970-01-01
    • 1970-01-01
    • 2021-03-26
    • 1970-01-01
    • 2014-10-06
    相关资源
    最近更新 更多