java 静态字符数组_java – 为什么不使用静态字符串数组?

我相信这是由于开发人员使用String作为替代(最有可能是无意的)枚举,静态String []是一种分组这些类型的方法。

它可能是在撰写文章时常见的设计缺陷

对于我们所知道的,本文可能针对Java 4代码库。

不是说这是在Java 4中编写的,但是当时存在的大多数生产代码可能都是以Java 4编写的。缺少autoboxing陷阱(这是很常见的),没有提到泛型(原始类型)使我相信这个。

为什么Oracle会执行这样的隐秘原则?

我不相信它与全球国家有关,因为我确信单身人士将被提及(作为全球国家的旗帜)。

我怀疑并发是一个问题,因为这篇文章没有提到任何关于跨线程共享数据,甚至使用多线程的事情。你会假设他们会提到关于线程环境的SOMETHING。

类型枚举的滥用字符串在当天很常见,所以我确信这个声明(如果我认为是相关的)在当时更容易理解。我发现这个声明在这个时候呢是一个很神秘的回答,但是没有人在意这个问题,导致在挖掘这个时候缺少谷歌的结果。

我的答案

到目前为止,开发人员仍然滥用String类型信息。由于缺乏枚举,我可以看到一个开发人员可能会试图做一些事情:

class Card {

static String HEARTS = "HEARTS";

static String DIAMONDS = "DIAMONDS";

static String CLUBS = "CLUBS";

static String SPADES = "SPADES";

static String[] CARD_TYPE = {

HEARTS, DIAMONDS, CLUBS, SPADES

};

private String type;

//...

}

使用数组来轻松循环(与Enum.values()一样)。

使用String作为枚举是皱眉的:

>这不是安全的。如果MAGE可以传递给一个方法,任何字符串都可以传递到它的位置。这导致我们…

>错误更容易做到。一般的开发人员看起来可能看起来很小,但可能对具有大型代码库的企业和许多消费者(如Oracle)来说是灾难性的。例如:隐藏的打字错误导致比较返回false。这样可以防止服务启动。缺少这种服务会导致错误。如果在用户注意到错误之前找不到,可能会导致漏洞。

这可以通过使用Java的内置类型系统进行修复:

abstract class CardType {

}

class Hearts extends CardType {

}

....

要么

枚举CardType {

听力,DIAMONDS,…;

}

这不仅容易出错,而且可以让您使用多态,这样就无需检查值来触发特定行为。该行为可以包含在类型本身中。

虽然我不能答应这是正确的答案,但它似乎是唯一的答案,这并不取决于声明中没有提及的修饰符的使用。

是的,上面的例子不使用正确的常量(缺少final)。但是尽管常数应该是首选,但是它们不需要从这种设计中获益(可以使用String作为类型信息),也不需要设计工作。由于人们可能并不总是为此使用常量,所以他们可能没有为此目的的最终或“数组的常数”。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值