Java中哪些特性最初是一种模式,现在已成为语言特性?

26

说实话,我需要帮助解决一道作业题,目前卡住了。

描述一个历史上始于模式设计,现在已经成为Java语言特性支持的事物。


5
我希望你能对这里的回答进行补充说明,使其更易懂,但不要改变原意。请翻译以下内容:“I hope you'll do some additional work (the describing) to the answers here :-)”。 - Paŭlo Ebermann
1
哇,很多非常有用的答案都很快地出现了。非常感谢大家! - chuck
9
谢谢你坦诚这是一道作业问题。 :) - Tridus
12
这是一份非常愚蠢的作业,对于想要学习编程的学生来说毫无意义。这名老师一定是个白痴。 - irreputable
2
尝试寻找程序员而不是SO。 - Aiden Bell
显示剩余6条评论
12个回答

46

他们可能在寻找枚举

在Java 1.5引入语言支持之前,标准做法是定义一组public static final int作为枚举值。
这种模式可以在Swing中看到。

许多这些常量都在接口中定义,以便类可以实现接口并使用常量而无需限定类型名称; SwingConstants接口是一个很好的例子。


Swing 甚至使用字符串作为许多魔术常量。 - Joey
2
+1:但你也应该添加,Java内置的枚举支持是类型安全枚举模式的一种(稍微不那么强大)实现。 - rsenna
1
Swing在某些地方实际上使用了“类型安全枚举模式”,使用类似于枚举的类。例如,在Swing文本中的HTML.Tag。http://download.oracle.com/javase/6/docs/api/javax/swing/text/html/HTML.Tag.html - Tom Hawtin - tackline
1
真的吗?Java只在1.5版本中才有枚举类型?哇,2004年之前的Java真是一个令人惊讶的落后语言... - configurator
@rsenna:是的,这实际上只是一点编译器魔法而已,;)。 @configurator:我知道,我很高兴当Java达到1.5版本时就开始使用它了。特别是对于泛型,没有它们,那将是类型安全的地狱。(在我看来) - cthulhu

42

我能想到的最明显的模式是通过 Iterable<T>Iterator<T> 进行迭代,现在该特性可通过增强型 for-each 循环来实现。


1
+1 是为了赞扬 Jon Skeet,也是为了一个好的回答。 - Mike

5

5

注解是一种元数据,它通常存储在各种xml文件或javadoc注释中,现在您可以使用注解将元数据与代码一起存储。

依赖注入是另一种模式,虽然不属于Java语言的一部分,但已经成为核心JDK框架的一部分。


4

迭代器。它们拥有一个特殊的for循环,该循环被转换为hasNext()和next()调用。


1
我建议使用泛型。这不是 Java 最初的一部分,但从 1.5 版本开始实现了该功能。

13
不,泛型并不是作为一种模式开始的。 - SLaks
在泛型出现之前,需要对集合中的所有元素进行强制转换。这种使用模式被广泛采用,非常令人烦恼,这就是为什么Sun在1.5中实现了泛型的原因。 - anon
6
我不会说这是一个糟糕的回答。在泛型出现之前,人们为了强制集合中的不变量而做出了各种让人恶心的事情,比如使用 Javadoc 注释、运行时类型检查、扩展 ArrayList 并重载像 add() 这样的方法只接受所需的类型等等。 - Mark Peters
@Voji:那就是我想说的。我在问@rofl是什么意思。 - SLaks
我曾经在变量声明上使用通用符号/<注释掉>/。 - Tom Hawtin - tackline
显示剩余2条评论

1

枚举.........................


5
如果我不必经历三次尝试将其长度变为30个字符并完成验证码,我会更快些… :-/ - dty
1
将链接http://download.oracle.com/javase/tutorial/java/javaOO/enum.html添加到您的代码中,即可获得这30个字符... - dm76

1

0

6
这个模式是怎么开始的?另外,它不是一个 语言 特性。 - SLaks
6
等等,Java 是高性能的?这是什么时候发生的? - SLaks
1
@SLaks,人们曾经担心性能问题,并使用高效模式编写代码。现在它已成为JVM的一个特性,可以说是内置于语言中...或者是我讽刺回答的其他理由 :P - Matthew

0

模板是C++语言的一个特性,而不是一种设计模式。 - SLaks

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接