我想知道在Java中是否存在与c ++的const相当的东西。我理解final关键字,但遗憾的是我无法使用它来声明函数返回值final。相反,它始终确保功能无法被覆盖,正确吗?
基本上,我想确保给定的返回类不能被修改并且是只读的。这可能在Java中吗?
答案 0 :(得分:19)
基本上,我想确保给定的返回类不能 修改并且是只读的。这可能在Java中吗?
不是直接的,但一种解决方法是immutable object。
示例 -
public final Foo{
private final String s;
public Foo(String s){
this.s = s;
}
// Only provide an accessor!
public String getString(){
return s;
}
}
答案 1 :(得分:13)
Java不支持对象引用的const限定。
变通办法包括以下内容:
不可变对象阻止收件人修改,但它们也阻止通过任何引用进行修改。它们不等同于C ++ const指针/引用。
最近的是只读接口类型。您可以将const-correct C ++类映射到两个Java单元,一个是仅具有const限定方法的接口。
这有时很有用,可以控制可以修改类实例的内容。但是,它并没有像在C ++中那样频繁地完成。
答案 2 :(得分:3)
“final”关键字表示const。但是在java中使用final与C ++有很大的不同 只有字段或局部变量才是最终的。 final类不是const类,而是一个无法继承的密封类。 最后一种方法是一种密封方法,一种不能被覆盖的方法。
在C ++中有“const类型”的概念,但在java中你只有const字段,const方法(不可覆盖)和const类(不可继承)的概念。
答案 3 :(得分:1)
Java不支持const的概念,因为C / C ++使用它。
无法编写与此Foo类等效的Java。
class Foo
{
public:
std::vector<Bar>& bars( void ) const
{ return m_bars; }
private:
std::vector<Bar> m_bars;
};
但是,Java还有另一种使用接口的方法。
class Foo
{
public:
ReadonlyList<Bar> bars( )
{ return m_bars; }
private:
ArrayList<Bar> m_bars;
};
Java的final
关键字与Foo * const
的关键字比任何其他c ++概念更相似。请注意,Foo const*
非常常见且有用,而Foo * const
则不那么有用。
答案 4 :(得分:0)
我认为你想要一个不可变的对象。如果一个对象的状态在构造之后不能改变,则该对象被认为是不可变的。
要做到这一点,你需要
不提供任何可以以任何方式改变对象状态的方法 - 不仅仅是setXXX方法,还有任何可以改变状态的方法。
公共决赛班SomeThing {
public Something(String name) {
fname=name
}
private final String fName;
public String getName() {
return fName;
}
}
答案 5 :(得分:-1)
Java特别放弃了C ++的一些功能,const就是其中之一。这种有意识的决定可以通过const
是Java中的保留字(但未使用)来反映
设计师可能认为该功能真的很烦人,并没有真正有用。当我是C ++编码器时,我有这种感觉。某种静态检查太过分了。