2011-12-07 61 views
1

我想知道,在Java中,我们如何创建一个常量对象(但不是不可变参数,因为不变性是类的所有对象的一个​​特征)?在Java中创建常量对象

第一:

final MyClass c = new MyClass(); 

创建一个恒定参考非恒定对象,因此我可以这样做:

c.setData(100); 

第二:

String类是一类它的所有实例都应该是常量(又称不可变对象)。我需要一种可以从常量对象和非常量对象创建的类型。


换句话说,如何授予一个类的某些对象的恒定性并将它从其他对象中移除。 (不需要将这个对象包装在任何包装中)。

+2

那么因为在Java中没有'const'关键字,所以你已经发现'final'没有做你想做的事情。简而言之:不存在Java中的任何东西都与C++中的const正确性相关。 – Voo

+0

你知道为什么吗? –

+0

由于const正确性会使语言复杂化,并且由于每个曾在C++中使用常量正确的代码库(必须调用旧版MS API)才能告诉您的每个人都有自己的一套问题。 java家伙认为值得一个权衡。 – Voo

回答

4

我想你想要的东西沿着C++中的const关键字的行,这使得一个否则可变类的实例不可变。但是,Java中不存在直接的等价物。

如果你控制这个类,你可以定义一个接口,只有当你需要一个“const”引用时才会暴露这个接口并且使用这个接口 - 这不需要任何包装,但是如果你需要为许多课程做这个。

1

你可以做的最接近的是扩展的基类,所以他们扔java.lang.UnsupportedOperationException重写其setter方法,这样你可以创建一个从基类或不可改变的子类对象...

0

而只包含一个元素的枚举呢?我认为这非常接近他需要的东西

+0

你的意思与@ttt相同吗?不,这不是我的意思! –