java - 为什么会有两个具有相同签名的构造函数?

标签 java

有两个具有相同签名的构造函数有哪些用例?

编辑:你不能在 Java 中这样做,因为 Effective Java 说你需要静态工厂。但我想知道为什么您首先需要这样做。

最佳答案

认为想要这样做的原因是您发现自己处于变量类型不足以提供上下文的情况。

例如,我可能会自欺欺人地认为我需要为我的 Point 类提供两个构造函数:一个按 X 和 Y 工作,一个按度数和弧度工作。两者都可以表示为 float 。

所以我认为我需要两个具有相同签名(float、float)的构造函数。

博士。 Bloch 指出最好是制作工厂方法:


    public static Point newPointByDegreesAndRadians (float degrees, float radians);
    public static Point newPointByXandY (float x, float y);

顺便说一句,工厂方法的另一种替代方法是创建携带数据类型中缺少的上下文的类型,如下所示:


    public class CoordinatesXY {
       float X;
       float Y;
       ...
    }
    public class CoordinatesDegreesRadians {
       float degrees;
       float radians;
       ...
    }
    public Point (CoordinatesXY coordinates) { ... }
    public Point (CoordinatesDegreesRadians coordinates) { ... }

您是否认为这比工厂方法更清晰是个人喜好问题。对于这种特定情况,我个人的感觉是,只有当您的设计使坐标独立于坐标中的一个点并独立于这些坐标时,这两个坐标类才有用。

关于java - 为什么会有两个具有相同签名的构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2842232/

相关文章:

java.lang.NullPointerException(nutch 2.2.1 和 MySql 作为数据存储)

java - 关于在java中读取ZipInputStream/ZipEntry的问题

java - 将位修改代码从 C 移植到 Java

java - 如何使我的自动化客户端-服务器 Java 网络代码以正确的顺序输出?

java - Android 中的电话

java - TextView 中的文本在滚动时淡出

大型项目的 Java 依赖管理

java - 基于条件的依赖注入(inject)

java - 为什么 SQLQuery setParameter 不能使用 LIKE?

java - ORA-01795 : maximum number of expressions in a list is 1000 error with myibatis