我发现了以下扩展:
extension ComparableBiggerExtension<T extends Comparable<T>> on T {
bool operator >(T other) => compareTo(other) > 0;
}
并且:
extension ComparableBiggerExtension<T> on Comparable<T> {
bool operator >(T other) => compareTo(other) > 0;
}
两者都声明了Comparable<T>
类型的运算符>
,其中T
是泛型。但我的问题是除了语法之外还有什么区别吗?
1条答案
按热度按时间xmq68pz91#
它们并不完全相同,考虑下面的程序
这会产生以下错误
这不起作用的原因是因为
A
是从Comparable<String>
而不是Comparable<A>
扩展而来的。但是,当使用第二个扩展定义时
程序成功运行,输出如下
上面的扩展可以很好地工作,因为
A
是一个Comparable<String>
。换句话说,第一个定义只适用于与自身进行比较的类型,而第二个定义适用于
Comparable
类型,无论它们是与自身进行比较还是与其他类型进行比较。