Java 如果不使用生成器、静态构造函数或引发异常,如何创建一个包含两个永远不相等的整数的构造函数?

Java 如果不使用生成器、静态构造函数或引发异常,如何创建一个包含两个永远不相等的整数的构造函数?,java,constructor,Java,Constructor,我一直感觉,当构造函数编写不正确时,代码开始变得指数级的复杂。最近,我一直试图在较低的层次上简化并坚持oop原则,这样代码就不会发展成复杂的蜘蛛网 我要问的问题可能是不可能的 public class Foo { private int x; private int y; public Foo(int x, int y) { this.x = x; this.y = y; } } 总是这样-->foo.getX()!=

我一直感觉,当构造函数编写不正确时,代码开始变得指数级的复杂。最近,我一直试图在较低的层次上简化并坚持oop原则,这样代码就不会发展成复杂的蜘蛛网

我要问的问题可能是不可能的

public class Foo
{
    private int x;
    private int y;

    public Foo(int x, int y)
    {
        this.x = x;
        this.y = y;
    }
}
总是这样-->
foo.getX()!=foo.getY()

你就是不能

保证两个整数不相等的唯一方法是只接受一个,然后以保证不相等的方式从中导出第二个整数,例如加一

    public Foo(int x, int y)
    {
        this.x = x;
        this.y = x + 1; // guaranteed not to be equal to x.
    }

但是,如果您需要接受两个值(例如,因为您需要比它们仅相隔一个更大的灵活性),唯一合理的做法是在它们相等时抛出异常。

您根本无法接受。保证两个整数不相等的唯一方法是接受一个整数,然后从中派生第二个整数,例如,通过添加一个。非常量的相等只能在运行时确定。@JamesKPolk-“非常量的相等只能在运行时确定”。这似乎是我在设计时应该记住的一条重要规则,不?抛出异常是非常非常正确的行为。@KeepAtIt:我不知道。重要的是,除非对象处于有效状态,否则构造函数永远不会成功完成。抛出异常是确保此不变量的有效且重要的工具。构造器和静态“构造器”也是有效地构造更复杂对象的工具,这些对象很难、不方便,或者仅仅通过构造器来创建。