为什么Java有这么多解析方法?

3
例如,Math.max( .. .. ) 方法被重载以支持不同类型的 Number。一个名称代表它们所有,因为无论 Number 的类型是什么,它做的都是相同的事情。
每个扩展 Number 的类都定义了 parseNumberType 方法,也是如此。

为什么会是这样?如果在 Number 中定义参数化的 parse 方法(当然也要在 Number 中进行参数化),比如: public abstract T parse( String s );(然后在所有 Number 的子类中具体实现),这样不是更好吗?

2
记住 Java 1.0 没有泛型,它们是在 Java 5 中引入的。但即使在那时,parseXxx 仍然返回原始类型而不是对象。 - JB Nizet
3个回答

2
不同版本的Math.max函数使用的是原始类型参数,而不是对象类型的数字。你所建议的做法需要在每次调用该方法时进行装箱/拆箱操作,这样的效率不如当前的设计。

2

Number自JDK 1.0就存在了,而泛型是在Java 1.5中引入的。因此,这样的通用解析方法是不可能的。

关于Math.max,它只接受原始类型,这些类型彼此之间没有任何形式的关系,并且每个原始类型都需要单独声明才能被支持。


0

解析实例方法是没有意义的。您必须在解析之前构造不可变值。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接