一个不可变类的内部构件在核心Java中的其他相关类中共享的示例

一个不可变类的内部构件在核心Java中的其他相关类中共享的示例,java,effective-java,immutability,Java,Effective Java,Immutability,不可变类的许多优点之一是,它们的内部实际上可以在其他相关类中以某种方式共享 从核心java库中可以举出什么作为这种技术的示例?这项技术为什么有效 编辑:这实际上是在Oracle对我的采访中提出的 不可变类的许多优点之一是,它们的内部实际上可以在其他相关类中以某种方式重用 我不相信这个论点/前提: Java不允许重用类的内部构件。。。除非将复制和粘贴编程视为合法的重用策略。在Java中,可以重用整个类,也可以不重用任何类 可以像不可变类一样重用可变类 如果您需要实体是可变的,那么原始类cab中的

不可变类的许多优点之一是,它们的内部实际上可以在其他相关类中以某种方式共享

从核心java库中可以举出什么作为这种技术的示例?这项技术为什么有效

编辑:这实际上是在Oracle对我的采访中提出的

不可变类的许多优点之一是,它们的内部实际上可以在其他相关类中以某种方式重用

我不相信这个论点/前提:

  • Java不允许重用类的内部构件。。。除非将复制和粘贴编程视为合法的重用策略。在Java中,可以重用整个类,也可以不重用任何类

  • 可以像不可变类一样重用可变类

  • 如果您需要实体是可变的,那么原始类cab中的不变性实际上是重用的障碍



这个前提实际上是用有效的Java写出来的,正如这个答案中提到的,得到了121票

有什么大不了的!仅仅因为你引用了一本著名的书(没有任何上下文),并不能使你的前提可信。很多著名的书都说了一些有争议甚至完全错误的事情

仅仅因为有121人投票支持引用这一行(在许多其他行中)的答案并不能增加可信度。他们投票支持整个答案,不一定是那句话。此外,投票并不表明客观的正确性。它们表示主观同意


如果这是一个辩论/讨论论坛,你应该用你自己的正确论点来反驳我的论点。但事实并非如此,这个问题(我正确地说)已经解决了。

String类就是这样一个例子——或者我猜是这样。Java库源代码可以在许多地方轻松浏览。既然SO不是一个讨论网站,这类问题就有点离题了。@nhahtdh String是如何做到这一点的?我不需要这里的细节,只需要概念。@Geek,
String
是一个非常薄的包装,它围绕着
char[]
值,有一个开始和结束索引。有鉴于此,实现一个轻量级的子字符串操作(相同的
char[]
,不同的开始值和结束值)是相当容易的。这个前提实际上是用有效的Java编写的,正如本文中提到的,我已经编辑了我的问题。这将是“共享”而不是“重用”。很抱歉造成混淆。@Geek-share和reuse在这个上下文中对我来说是一样的。那么msandiford的评论呢?子字符串操作没有重用字符串的内部结构?@Geek-我看不出msandiford(或nhahtdh)的评论与你的问题有什么关联。String.substring未与相关类共享内部构件。它在字符串的不同实例之间共享内部状态。实际上,字符串是
final
,所以不能与不同的类共享状态。