首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >泛型方法使用不同的实际参数

泛型方法使用不同的实际参数
EN

Stack Overflow用户
提问于 2015-08-17 12:01:01
回答 3查看 56关注 0票数 3

这里我有一个泛型方法,它接受泛型类型参数T

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 public static <T> boolean compare(T p1, T p2) {
        return p1.equals(p2);
    }

现在,如果我像下面这样调用这个方法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
compare(10, "");

它可以工作,但我假设它不应该工作,因为它只能接受一种类型的Type parameter,那么推理算法是如何工作的呢?

EN

回答 3

Stack Overflow用户

发布于 2015-08-17 12:07:23

它之所以有效,是因为Integer和String具有共同的parent: Object,并且您没有在类型T中指定任何约束。如果您编写:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public static <T extends Number> boolean compare(T p1, T p2) {
    return p1.equals(p2);
}

你会得到编译时错误。

票数 2
EN

Stack Overflow用户

发布于 2015-08-17 12:07:58

该方法调用之所以有效,是因为您没有约束类型T,而且由于StringInteger都是java.lang.Object的子类型,因此将推断出该类型。

票数 2
EN

Stack Overflow用户

发布于 2015-08-17 12:07:14

您的方法将进行编译,并且在运行时不会抛出任何异常。

原因是:

由于参数之间的引用不等于,因此将返回false

如果您使用共享相同引用的对象调用您的方法,它将打印true

如果您使用共享相同值的对象(例如,两个相等的String)调用您的方法,它将返回true

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32049849

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文