- 主题:实现不可变类可以用public final吗?
网上说不可变类的资料基本都说要把成员加上private,
那么public加上final就一定不行吗?
--
FROM 180.107.67.*
final不是const
如果MyClass是可变类,那么final MyClass是可变的
【 在 Adiascem (lightsun) 的大作中提到: 】
: 网上说不可变类的资料基本都说要把成员加上private,
: 那么public加上final就一定不行吗?
--
FROM 76.126.252.*
那 public final int a; 这样的,应该是可以的吧?
【 在 here080 (hero080) 的大作中提到: 】
: final不是const
: 如果MyClass是可变类,那么final MyClass是可变的
--
FROM 180.107.67.*
这个是可以。跟private加getter一个效果啊。public成员变量一般只用于特殊的类嘛。
【 在 Adiascem (lightsun) 的大作中提到: 】
: 标 题: Re: 实现不可变类可以用public final吗?
: 发信站: 水木社区 (Tue Jun 22 10:51:02 2021), 站内
:
: 那 public final int a; 这样的,应该是可以的吧?
:
: 【 在 here080 (hero080) 的大作中提到: 】
: : final不是const
: : 如果MyClass是可变类,那么final MyClass是可变的
:
:
: --
:
: ※ 来源:·水木社区 mysmth.net·[FROM: 180.107.67.*]
--
FROM 76.126.252.*
谢谢!
看起来,不变类似乎要靠程序员自身的实现,
似乎没有一个简单的声明或限制,
就能让编译器识别出到底是不是可变的。
我这个理解对吧?
【 在 here080 (hero080) 的大作中提到: 】
: 这个是可以。跟private加getter一个效果啊。public成员变量一般只用于特殊的类嘛。
--
FROM 180.107.67.*
成员变量本身不可变的话,就没问题
比如这里换成String也可以,但是换成StringBuffer就不行
【 在 Adiascem (lightsun) 的大作中提到: 】
: 那 public final int a; 这样的,应该是可以的吧?
--
FROM 180.167.95.*
是的,java的final只能保证引用的值不变
【 在 Adiascem (lightsun) 的大作中提到: 】
: 谢谢!
: 看起来,不变类似乎要靠程序员自身的实现,
: 似乎没有一个简单的声明或限制,
: ...................
--
FROM 180.167.95.*
可以用lombok这样的框架,一个@Value就可以了
【 在 Adiascem (lightsun) 的大作中提到: 】
: 谢谢!
: 看起来,不变类似乎要靠程序员自身的实现,
: 似乎没有一个简单的声明或限制,
: ...................
--
FROM 210.12.183.*
可以啊,只要你觉得直接暴露成员变量没问题。
通常我写的Immutable类自己肯定是final,成员是private final + public getter,然后在构造函数里初始化每个成员。
public final class A {
private final B b;
public A() {
b = new B();
}
}
【 在 Adiascem 的大作中提到: 】
: 网上说不可变类的资料基本都说要把成员加上private,
: 那么public加上final就一定不行吗?
--
FROM 125.168.196.*
private只是前提,你看看java类库的String类怎么实现的,任何方法都不改变本身的成员变量,如果要改变只能生成新对象
【 在 Adiascem (lightsun) 的大作中提到: 】
: 网上说不可变类的资料基本都说要把成员加上private,
: 那么public加上final就一定不行吗?
:
: --
--
FROM 111.193.122.*