为什么要使用字符串

最近,我在一次培训课程中辅导初中生。 任务之一是编写一个类,该类可以根据某些字符串键使映射变形。 创建的初级用户之一的结果包含以下方法:

void dwarwle(HashMap<String,Dwarwable> mapToDwarwle, String dwarwleKey){
		for( final Entry<String, Dwarwable> entry : mapToDwarwle.entrySet()){
			dwarwle(entry.getKey(),entry.getValue(),dwarwleKey);
		}
	}

该代码通常还可以。 使用散列表中分配给它的实际键对单个可变形条目进行变形的方法,并且该变形键被分解为单独的方法。 非常简单,我不在这里列出。 只要您知道什么实际上是矮人,变量名也是有意义的。 该方法简短易读,但是参数列表需要一个HashMap而不是Map 。 为什么我们要限制调用方使用HashMap ? 如果调用者具有TreeMap并且有充分的理由,该怎么办。 我们是否想要一个可以使TreeMap相形见separate的单独方法? 当然不是。

期望接口,通过实现。

大三学生将代码替换为HashMap改为Map,但是大约五分钟后,这位聪明的女士举起了手,并提出了以下问题:

“如果我们将HashMap更改为Map,为什么不将String更改为CharSequence?”

当问题突然出现时,要回答这样的问题并非易事。 我想到的第一件事是原因是我们通常这样做,这就是原因。 但这不是一个真正的论点,至少我不会接受那样的事情,而且我也要让我的学生不接受这样的回答。 无论如何,这将是非常独裁的风格。

真正的答案是,该参数用作映射中的键,并且映射的键应该是不可变的(至少变异应该对等号和哈希码计算具有弹性)。 CharSequence是一个接口,Java中的一个接口(不幸的是)不能保证不变性。 只有实现可以。 String是此接口的一个良好的,广为人知的且经过测试的实现,因此可以是一个不错的选择。 关于stackoverflow有很好的讨论。

在这种特殊情况下,我们期望实现,因为我们需要不可变的东西,并且我们“不能”信任调用方传递不可变的字符序列实现。 或者:我们可以,但是要付出代价。 如果后来通过并修改了StringBuilder ,那么我们矮小的程序库可能无法正常工作,并且可能会开始责备战争。 在设计API和库时,我们不仅应考虑可能的使用,还应考虑实际的平均使用情况。

一个库好坏了,没有用完了。

这也可以应用于其他产品,不仅是库,而且可能会导致太大的问题(物理和武器)。

翻译自: https://www.javacodegeeks.com/2014/10/why-to-use-string.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值