java - 在构造函数中初始化值之前检查条件

标签 java oop

我有一个练习,其中我必须根据相对的顶点(点)创建一个矩形。我有一个类 Point 来初始化点,然后使用它们创建一个矩形(计算宽度、高度、面积......)。 我想在矩形构造函数中初始化值之前检查点的 x 或 y 值是否不相等。我尝试通过 setter 来完成此操作,但不确定如何将其传递给构造函数。如何正确执行 - 检查条件后传递值?

public class Point {

    private double x;
    private double y;

    public Point(double x, double y) {
        this.x = x;
        this.y = y;
    }
    public double getX() {
        return x;
    }
    public double getY() {
        return y;
    }
}


public class Rectangle {

    Point p1;
    Point p2;


    public Rectangle(Point p1, Point p2) {
            this.p1 = p1;
            this.p2 = p2;
    }
    public void setPoints() {
        boolean rectangleCondition = (p1.getX() != p2.getX()) && (p1.getY() != p2.getY());
        if(rectangleCondition) {
            Rectangle.p1 = p1;
            Rectangle.p2 = p2;
        }

    }

最佳答案

您只需在构造函数中执行此操作并让 p1p2因为 null 对象是条件无效

public Rectangle(Point p1, Point p2) {
    if(p1.getX() != p2.getX() && p1.getY() != p2.getY()){
        this.p1 = p1;
        this.p2 = p2;
    }
}

或者创建默认点:

public Rectangle(Point p1, Point p2) {
    if(p1.getX() != p2.getX() && p1.getY() != p2.getY()){
        this.p1 = p1;
        this.p2 = p2;
    }else{
        this.p1 = new Point(0,0);
        this.p2 = new Point(1,1);
    }
}

或者抛出异常

public Rectangle(Point p1, Point p2) {
    if(p1.getX() != p2.getX() && p1.getY() != p2.getY()){
        this.p1 = p1;
        this.p2 = p2;
    }else{
        throw new IllegalArgumentException();
    }
}
<小时/>

还请记住Rectangle.p1无法工作,因为属性是针对每个实例的,调用类似的属性意味着它对于类是全局的,并且它是用 static 定义的关键字

static Point globalPointForClass;

关于java - 在构造函数中初始化值之前检查条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58511924/

相关文章:

java - Cipher.getInstance 太慢

构造函数之外的 JavaScript OOP 原型(prototype)?

php - MySQLi 立即在析构函数中关闭

java - 变形金刚类设计

c++ - 函数返回临时对象行为不当

c++ - 基类中的 switch 语句需要使用派生类的值

java - junit 中的模拟 amazon web 服务请求/响应对象

java - 在处理不可变对象(immutable对象)时,如何最好地返回带有修改字段的副本?

java - Selenium、Java、屏幕截图和单击按钮的问题

java - 带掩码的 JSTL 格式字符串