Java 中的常量返回值

2023-12-26

我有 C++ 背景,对 Java 的不可变特性感到好奇。函数的返回值可以指定为const吗? (表示返回值不可修改)

另外,为了加分,在 C++ 中,函数定义可以后缀为 const,以声明该函数不会修改任何类级别值。这在Java中也可能吗? (这意味着根据定义,函数将无法在内部更改其类状态)

非常感谢!


不,Java 的final与 C++ 有很大不同const。您不能做您所要求的任何事情。

要使对象不可变,您或多或少需要强制执行它(而不是像 C++ 中那样寻求编译器的帮助)。从http://docs.oracle.com/javase/tutorial/essential/concurrency/imstrat.html http://docs.oracle.com/javase/tutorial/essential/concurrency/imstrat.html:

以下规则定义了创建不可变对象的简单策略。 ...

  1. 不要提供“setter”方法——修改字段或字段引用的对象的方法。
  2. 使所有字段final and private.
  3. 不允许子类重写方法。最简单的方法是将类声明为final。更复杂的方法 是让构造函数private并在工厂中构造实例 方法。
  4. If the instance fields include references to mutable objects, don't allow those objects to be changed:
    • 不要提供修改可变对象的方法。
    • 不要共享对可变对象的引用。切勿存储对传递给构造函数的外部可变对象的引用;如果 必要时,创建副本并存储对副本的引用。 同样,创建内部可变对象的副本 避免在方法中返回原件是必要的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java 中的常量返回值 的相关文章

随机推荐

  • Fabric - ThreadingGroup 异常停止剩余请求?

    我是 Fabric 新手 想对一些远程 SSH 服务器并行执行一系列命令 看来我应该使用 ThreadingGroup 来做到这一点 我可以做到 并且似乎有效 我唯一真正的问题是我想了解如何处理错误情况 以及如何将服务器列表作为字符串传递
  • 无法更改 UILabel 文本颜色

    我想更改 UILabel 文本颜色 但无法更改颜色 这就是我的代码的样子 UILabel categoryTitle UILabel alloc initWithFrame CGRectMake 0 0 46 16 categoryTitl
  • 无法将文件“.mdf”附加为数据库“aspnet-”

    我正在使用 Web 套接字和 SqlDependency 来构建游戏服务器 SqlDataReader 的错误表明我应该调用 SqlDependency Start 我在 Global Asax 中包含以下内容 SqlDependency
  • GraphQL 订阅:最大侦听器超出警告

    我们使用 GraphQL 订阅和 pubsub 来订阅帖子 当发生超过 10 个订阅时 我们会收到节点警告 MaxListenersExceededWarning 检测到可能的 EventEmitter 内存泄漏 是否可以提高 pubsub
  • php:获取文件内容并将文件存储在特定文件夹中

    我正在从以下位置获取文件内容file get contents php 中的函数 我想将该文件存储在特定文件夹中 我该怎么做呢 image file get contents http www affiliatewindow com log
  • 更改Apple Watch应用程序的应用程序ID

    我最近将一些应用程序从一个帐户转移到另一个帐户 当我这样做时 应用程序 ID 也转移了 但是 WatchKit 应用程序或 WatchKit 扩展的应用程序 ID 不会传输 我尝试上传 上传完成并出现在 iTunes Connect 预发行
  • sklearn.pipeline.Pipeline 到底是什么?

    我不明白如何sklearn pipeline Pipeline完全有效 里面有一些解释doc http scikit learn org stable modules generated sklearn pipeline Pipeline
  • RegisterClientScriptBlock参数在实际场景中的用法?

    https i stack imgur com dVjHt jpg https i stack imgur com dVjHt jpg 我一直不明白它的真正用法Control type key这个类的用法 一般来说 我总是使用 this G
  • 当人们谈论使用“分片”扩展网站时,他们是什么意思?

    我曾多次听到关于解决大型网站的扩展问题的 分片 技术 这种 碎片 技术是什么 为什么它这么好 卡尔 塞金有一个好博客 http codebetter com blogs karlseguin archive 2008 06 30 scale
  • 流畅的 Nhiberhate 和缺失的毫秒

    我在当前的项目中使用 Fluent Nhibernate 和 Nhibernate 我需要将时间记录到毫秒 我有这个用于我的地图 Map x gt x SystemDateTime CustomType Timestamp Not Null
  • 在 ipython 笔记本上找不到模块

    我有一个 ipython 笔记本 其开头为 import sklearn 当我运行它时 我得到 ImportError No module named sklearn 事实上 如果我在笔记本上运行以下代码片段 它不会显示 scikit le
  • 防止不断检查错误的模式?

    在 C 中 是否有一种模式可以消除不断检查调用其他函数的函数中的错误的需要 例如如果函数 foo 依次调用 a b 和 c 则在继续之前必须检查每个函数的返回值 如果 a b 或 c 也调用其他函数 这些函数也可能调用其他函数 这会留下一长
  • 有没有办法在 Scala 中从数组或列表初始化多个变量?

    我想做的基本上是 Java 代码中的以下内容 String tempStrs generateStrings final int hour Integer parseInt tempStrs 0 final int minute Integ
  • Python:用线程分割总和

    我需要进行昂贵的计算来拟合一些实验数据 拟合函数是特征模态的总和 每个特征模态都包含特定的表面积分 因为如果你按照我想到的线程化的经典方式来做的话 它会相当慢 顺便说一句 我正在使用 python 我想计算的函数是这样的 def fit f
  • 关系型 MySql 表 UPDATE 语句的基本规则:for 与 while

    我正在使用 mysql 和 php 进行第一步 因此我对正确代码优化的基本规则存有疑问 我有一个案例 我的UPDATE语句需要在一定数量的行上执行 因为它应该在关系表上执行 那么 for cicle 是否正确
  • Spark数据集写入的区别

    我在用着Spark Java 我需要知道以下写入 Hadoop 方法之间是否有任何差异 性能等 ds write mode mode format orc save path Or ds write mode mode orc path T
  • Python——最适合这项工作的 GUI 库?

    我一直在使用 WxPython 并尝试过 Tk 但似乎虽然两者都很好并且我可能会将它们用于其他项目 但它们似乎都无法完成我当前想要的事情项目 这很好 他们擅长自己所做的事情 基本上我正在寻找的是能让我制作丰富的图形 GUI 的东西 我的具体
  • 根据R中的属性表值导出栅格

    我有一个大型栅格文件 它具有关联的栅格属性表 RAT class RasterLayer dimensions 32550 13900 452445000 nrow ncol ncell resolution 1 1 x y extent
  • 如何在 SQL SERVER 中将 varchar 列转换为 bit 列

    Flag1 is a varchar值为 true 和 false 的列 我需要将其转换为位列 当我尝试这样做时 Convert Bit Flag1 它显示一个错误 Msg 245 Level 16 State 1 Line 2 Synta
  • Java 中的常量返回值

    我有 C 背景 对 Java 的不可变特性感到好奇 函数的返回值可以指定为const吗 表示返回值不可修改 另外 为了加分 在 C 中 函数定义可以后缀为 const 以声明该函数不会修改任何类级别值 这在Java中也可能吗 这意味着根据定