加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

在Brian Goetz的Java Concurrency in Practice中,为什么point cl

发布时间:2020-12-15 04:30:16 所属栏目:Java 来源:网络整理
导读:请让我知道为什么下面的类是不可变的,正如 Java并发实践中所讨论的那样 – 作者Brian Goetz @Immutablepublic class Point { public final int x,y; public Point(int x,int y) { this.x = x; this.y = y; }} 由于该类不是最终的,任何类都可以扩展它.但为什
请让我知道为什么下面的类是不可变的,正如 Java并发实践中所讨论的那样 – 作者Brian Goetz

@Immutable
public class Point {
    public final int x,y;

    public Point(int x,int y) {
        this.x = x;
        this.y = y;
    }
}

由于该类不是最终的,任何类都可以扩展它.但为什么它仍然是不可变的?

解决方法

它是不可变的,因为一旦构造了它的实例,就无法以任何方式改变其内部状态.那是因为它没有设置器,x和y是最终的,即你不能改变/改变x或y值.

编辑(检查那个例子):

package test;

public class Test002 {

    public static void main(String[] args) {
        Point1 p1 = new Point1(4,10);
        consume(p1);
    }

    public static void consume(Point p){
        System.out.println("=============");
        System.out.println(p.x);
        System.out.println(p.y);

        if (p instanceof Point1){
            System.out.println("=============");
            Point1 p1 = (Point1)p;
            p1.setX(5);
            p1.setY(11);
            System.out.println(p.x);
            System.out.println(p.y);
            System.out.println(p1.getX());
            System.out.println(p1.getY());          
        }
    }

}



class Point {
    public final int x,int y) {
        this.x = x;
        this.y = y;
    }
}

class Point1 extends Point {
    private int x;
    private int y;

    public Point1(int x,int y) {
        super(x,y);
        this.x = x;
        this.y = y;
    }

    public void setX(int x) {
        this.x = x;
    }

    public void setY(int y) {
        this.y = y;
    }

    public int getX() {
        return x;
    }

    public int getY() {
        return y;
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读