Skip to content

Commit e92a639

Browse files
committed
进一步阐述enum中属性的对象意义
1 parent 37006b1 commit e92a639

File tree

2 files changed

+53
-4
lines changed

2 files changed

+53
-4
lines changed

guide/code/enum/src/cn/edu/sdut/softlab/TrafficSignalTest.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
*/
66
public class TrafficSignalTest {
77
public static void main(String[] args) {
8+
TrafficSignal red = TrafficSignal.valueOf("go");
9+
System.out.println(red);
810
for(TrafficSignal ts : TrafficSignal.values()) {
911
System.out.println(ts.toString() + " means " + ts.value());
1012
}

guide/enum.lyx

Lines changed: 51 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -412,6 +412,21 @@ status open
412412
ect继承下来的,这也是enum枚举类型对象和普通对象的区别。
413413
\end_layout
414414

415+
\begin_layout Standard
416+
注意到,enum对象中的属性,比如SUNDAY也是一个对象,而且是WeekDay类型的对象,我们从反编译后的代码可以看出这一点。因此,SUNDAY这样的属性就有
417+
name()方法和ordinal()方法。
418+
\begin_inset Note Note
419+
status open
420+
421+
\begin_layout Plain Layout
422+
这里的描述不够清晰,值得商榷
423+
\end_layout
424+
425+
\end_inset
426+
427+
428+
\end_layout
429+
415430
\begin_layout Standard
416431
\begin_inset Flex Notice
417432
status open
@@ -581,6 +596,17 @@ ordinal:序号,即enum在定义中的序号,默认从0开始依次递增
581596
定义一个enum,表达三基色(红绿蓝)。
582597
\end_layout
583598

599+
\begin_layout Standard
600+
\begin_inset Separator plain
601+
\end_inset
602+
603+
604+
\end_layout
605+
606+
\begin_layout Exercise
607+
在WeekDay的定义中,SUNDAY是一个字符串,还是一个对象?如果是一个对象,这个对象是什么类型的?
608+
\end_layout
609+
584610
\begin_layout Section
585611
enum的构造方法
586612
\end_layout
@@ -800,8 +826,8 @@ cSignal增加了value属性以表明不同颜色交通信号灯所代表的意
800826
\begin_inset Quotes erd
801827
\end_inset
802828

803-
时,只需要修改TrafficSignal类的定义即可,其他引用TrafficSignal的类都不需要修改,也就是说,我们的代码可以很好的适用未来的变化:用尽量小
804-
的代价应对未来的需求变化,软件的可维护性就大大提高了。
829+
或者“hold on”时,只需要修改TrafficSignal类的定义即可,其他引用TrafficSignal的类都不需要修改,也就是说,我们的代码可以很好的适
830+
用未来的变化:用尽量小的代价应对未来的需求变化,软件的可维护性就大大提高了。
805831
\begin_inset Flex Emph
806832
status open
807833

@@ -853,7 +879,7 @@ name "exer:定义一个enum-Planet表示太阳系各行星的名称、质量和
853879

854880
\end_inset
855881

856-
882+
通过这个练习,我们可以看到,enum将行星的名称、质量和半径这三个常量组织到一个Planet对象中了。
857883
\end_layout
858884

859885
\begin_layout Standard
@@ -963,7 +989,28 @@ lstparams "caption={EnumInSwitchTest.java},label={EnumInSwitchTest.java}"
963989
status open
964990

965991
\begin_layout Plain Layout
966-
关于enum的静态导入:在实际使用enum对象的时候,如果我们多次使用了同一个enum对象,可以使用静态导入技术适当简化代码,比如下面这样:
992+
关于enum的静态导入
993+
\begin_inset Index idx
994+
status open
995+
996+
\begin_layout Plain Layout
997+
静态导入
998+
\end_layout
999+
1000+
\end_inset
1001+
1002+
1003+
\begin_inset Foot
1004+
status collapsed
1005+
1006+
\begin_layout Plain Layout
1007+
注意到,静态导入的对象不能在默认包中,因此必须将TrafficSignal类放到一个包里面。这在实际的项目中一般没有问题,在练习的时候要注意创建一个包来容纳Tr
1008+
afficSignal类。
1009+
\end_layout
1010+
1011+
\end_inset
1012+
1013+
:在实际使用enum对象的时候,如果我们多次使用了同一个enum对象,可以使用静态导入技术适当简化代码,比如下面这样:
9671014
\end_layout
9681015

9691016
\begin_layout Plain Layout

0 commit comments

Comments
 (0)