在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; } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |