java - Java泛型语法之间的区别?

标签 java generics wildcard

这些方法定义有什么区别?

public <T extends Foo> void loadData(Class<T> p_class);

public void loadData(Class<? extends Foo> p_class);

最佳答案

两个签名都接受完全相同的参数集,因此在这个意义上是等价的。正如评论中所指出的,在第二种情况下,您将无法在方法主体中引用 T。然而,根据 Effective Java,第二个签名是首选(因为它更短且更清晰)。在那本书中,给出的建议是使用第二个签名,如果方法中需要 T,则使用带有第一个签名的私有(private)辅助方法。像这样:

private <T extends Foo> void helper(Class<T> p_class) {
    // code
}

public void loadData(Class<? extends Foo> p_class) {
    helper(p_class);
}

关于java - Java泛型语法之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29164731/

相关文章:

java - 无法使用 cp 命令复制所有文件

C# 获取泛型类型名称

excel - 文件名通配符的返回值

PHP 比较两个字符串中的一个字符不同,通配符方法

java - 在 Android 中使用 Intent

java - 在 bouncy caSTLe 上验证 javacard 签名 ALG_ECDSA_SHA

java - 这个 NullPointerException 的来源是什么

java - Name Clash, override fail, on a class 实现两个具有相同删除的接口(interface)

c# - 转换为泛型方法不支持的基类型

java - 字符串 "Slot-Extraction"