请问Java中有类似于C++中的const么?
比如 我的类为
public class SomeClass
{
private SomeClass2 m_member;
public SomeClass2 getMember()
{
return m_member;
}
}
在这里, getMember传回去的应该是指针吧, 如果我不想让别人可以更改 m_Member所封装的任何值
SomeClass2 instance = someClass.getMember();
instance.changeValue();
我该怎么办那? 除了 return m_Member.clone();
这类似于
C++
public:
SomeClass2 getMember() const;
或者
C#
public readonly SomeClass2 getMember();
请各位大侠赐教:D
------解决方案--------------------final
------解决方案--------------------如果你不想改变m_member引用的对象,那么将m_member声明为final就可以了;
看你的意思是不想改变m_member里面的值,那么就只有在SomeClass2的定义里面做文章了;
例如将SomeClass2的成员定义为final,或者使用一些模式也可以实现。
------解决方案--------------------对method 而言 final 是不允许override的意思,对field而言就是相当于定义该field为常量。但是我觉得即使把reference类型变量m_meber定义为final也不能实现你保护该对象内部数据的目标,因为这只是表明这个reference变量是常数,而不是它refer的object中封装的数据就不能被改变了。我觉得你应该考虑用为SomeClass2类的method设置恰当的access specifier(e.g protected )来实现保护封装数据的目的。
------解决方案--------------------楼上的见解很接近了,大体来说,你用方法返回的是成员引用,只要那个引用的对象提高了更改其内部状态的方法,你就休想把他设为不可更改的对象,所以,你要做的是修改对象的类型,考虑继承或聚合修改对象的可访问接口。
以下引用lz的代码:
public class SomeClass
{
private SomeClass2 m_member;
public SomeClass2 getMember()
{
return m_member;
}
}
在这里, getMember传回去的应该是指针吧, 如果我不想让别人可以更改 m_Member所封装的任何值
SomeClass2 instance = someClass.getMember();
instance.changeValue();
你能做的,不是将someClass.getMember()作什么处理,而是对SomeClass2进行修改,让它不具备changeValue()的方法。