当前位置: 首页 > 面试题库 >

Java等同于C ++的const成员函数?

公孙黎昕
2023-03-14
问题内容

在C ++中,我可以定义一个 访问器 成员函数,该函数返回(或引用)私有数据成员的值,以便调用者无法以任何方式修改该私有数据成员。

有没有办法在Java中做到这一点?

如果是这样,怎么办?

我知道final关键字但AFAIK应用于 方法 时:

  1. 防止在子类中重写/多态化该方法。
  2. 使该方法可内联。 (请参见下面@Joachim Sauer的评论)

但这并不限制该方法返回对数据成员的引用,以使调用者无法对其进行修改。

我是否忽略了明显的事情?


问题答案:

您要么返回一个不变的对象,要么返回一个私有实例变量的副本。这样,可以“保护”对象的内部状态,使其免受修改,即:

private MyMutableObject mutable = ...

public MyMutableObject getMutableObject() {
   return new MyMutableObject(this.mutable);
}
`


 类似资料:
  • 主要内容:const成员变量,const成员函数(常成员函数)在类中,如果你不希望某些数据被修改,可以使用 关键字加以限定。const 可以用来修饰成员变量和成员函数。 const成员变量 const 成员变量的用法和普通 const 变量的用法相似,只需要在声明时加上 const 关键字。初始化 const 成员变量只有一种方法,就是通过构造函数的初始化列表,这点在前面已经讲到了,请猛击《 C++初始化列表》回顾。 const成员函数(常成员函数) con

  • 问题内容: 实现与Java等效的C ++的首选方法是什么? 问题答案: 尝试使用: 这要求你的编译器启用rtti支持。 编辑:我对这个答案有很好的评论! 每次需要使用dynamic_cast(或instanceof)时,最好问问自己是否必要。通常,这是不良设计的标志。 典型的解决方法是将要检查的类的特殊行为放入基类的虚函数中,或者引入诸如访问者之类的东西,你可以在不更改接口的情况下为子类引入特定行

  • 我们一直强调,最低权限原则(principle of least privilege)是良好软件工程的最基本原则之一。下面介绍这个原则如何应用于对象。 有些对象需要修改,有些不需要。程序员可以用关键字const指定对象不能修改,且修改时会产生语法错误。例如: const Time noon(12,0,0); 声明 Time 类对象 noon 为 const,并将其初始化为中午12时。 软件工程视点

  • 问题内容: 我想知道Java中是否有等效于c ++的const。我了解final关键字,但是不幸的是,我不能使用它来声明函数返回值final。相反,它始终确保该功能不能被覆盖,对吗? 基本上,我想确保给定的返回类不能被修改并且是只读的。用Java有可能吗? 问题答案: 基本上,我想确保给定的返回类不能被修改并且是只读的。用Java有可能吗? 一种解决方法不是直接进行,而是一种 不可变的 对象 。

  • Message是我制作的一个类。我在传递给messageTimeOut的主函数中有一组它们(以及一些其他函数)。在messageTimeOut中,我使用一个编辑器遍历它们并访问不同的成员函数。然而,我只能访问迭代器指向的消息的const成员函数。如果尝试访问非常量成员函数,则会出现以下错误: "在函数`ulvMessageTimeOut(threadParameters*)':main.cpp:7

  • 主要内容:在类体中和类体外定义成员函数的区别类可以看做是一种数据类型,它类似于普通的数据类型,但是又有别于普通的数据类型。类这种数据类型是一个包含成员变量和成员函数的集合。 类的成员变量和普通变量一样,也有数据类型和名称,占用固定长度的内存。但是,在定义类的时候不能对成员变量赋值,因为类只是一种数据类型或者说是一种模板,本身不占用内存空间,而变量的值则需要内存来存储。 类的成员函数也和普通函数一样,都有返回值和参数列表,它与一般函数的区别是