java硬枚举调用_Java基础笔记 - 枚举类型的使用介绍和静态导入

1、枚举(Enum):

JDK5.0中加入了枚举类型,使用enum关键字定义,可以按照如下定义:

public enum Weather{

Sunny,

Rainy,

Cloudy,

}

1.1、枚举类型中的两个静态方法:

values()

获取枚举类型的所有枚举常量

valueOf(ClassenumType, String name)

返回带指定名称的指定枚举类型的枚举常量。

1.2、values方法的使用:

for(Weather weather : Weather.values()){

System.out.println(weather);

}

System.out.println(Weather.valueOf(Weather.class, "Sunny"));

1.2、values方法的使用:

for(Weather weather : Weather.values()){

System.out.println(weather);

}

//以下输出为Sunny

System.out.println(Weather.valueOf(Weather.class, "Sunny"));

1.3、创建包含私有成员变量的枚举常量:

public enum Weather{

Sunny("晴天"),

Rainy("雨天"),

Cloudy("多云");

//私有成员变量,保存名称

private String value;

public String getValue() {

return value;

}

//带参构造函数

Weather(String value){

this.value = value;

}

}

public static void main(String[] args) {

Weather weather1 = Weather.Sunny;

//以下输出为"晴天"

System.out.println(weather1.getValue());

}

1.4、枚举类型详细说明:

enum关键字的作用类似于class或interface,本质上是在定义一个类别,细节的实现由编译器完成。

自定义的枚举类型实质上继承自java.lang.Enum抽象类。而每一个成员常量其实就是自己定义的枚举类型的一个实例,都被定义为final,所有无法改变他们,另外他们是static,pulibc的,即:

public static final 枚举常量;

在运行期间我们无法再使用该枚举类型创建新的实例,这些实例是在编译期间就完全确定下来了的。

1.5、枚举的比较:

compareTo

public final int compareTo(E o)

比较此枚举与指定对象的顺序。在该对象小于、等于或大于指定对象时,分别返回负整数、零或正整数。 枚举常量只能与相同枚举类型的其他枚举常量进行比较。该方法实现的自然顺序就是声明常量的顺序。

指定者:

接口 Comparable 中的 compareTo

参数:

o - 要比较的对象。

返回:

负整数、零或正整数,根据此对象是小于、等于还是大于指定对象。

Weather[] arrays = Weather.values();

for(Weather weather2 : arrays){

System.out.println((Weather.Sunny).compareTo(weather2));

}

1.6、枚举的相关方法:

ordinal

public final int ordinal()

返回枚举常量的序数(它在枚举声明中的位置,其中初始常量序数为零)。 大多数程序员不会使用此方法。它被设计用于复杂的基于枚举的数据结构,比如 EnumSet 和 EnumMap。

返回:

枚举常量的序数

for(Weather weather2 : arrays){

System.out.println(weather2.ordinal() + ":" + weather2);

}

2、EnumSet:

public abstract class EnumSet

extends AbstractSetimplements Cloneable, Serializable

与枚举类型一起使用的专用 Set 实现。枚举 set 中所有键都必须来自单个枚举类型,该枚举类型在创建 set 时显式或隐式地指定。枚举 set 在内部表示为位向量。此表示形式非常紧凑且高效。此类的空间和时间性能应该很好,足以用作传统上基于 int 的“位标志”的替换形式,具有高品质、类型安全的优势。如果其参数也是一个枚举 set,则批量操作(如 containsAll 和 retainAll)也应运行得非常快。

此类可以帮助我们建立枚举值的集合,里面提供了一系列的静态方法,可以指定不同的集合建立方式。

2.1、of方法

public static EnumSetof(E first,

E... rest)

创建一个最初包含指定元素的枚举 set。此工厂方法的参数列表使用变量参数功能,该方法可以创建一个最初包含任意个元素的枚举 set,但是这样很可能比不使用变量参数的重载运行得慢。

参数:

first - 此 set 最初要包含的元素

rest - 此 set 最初要包含的其余元素

返回:

最初包含指定元素的枚举 set

抛出:

NullPointerException - 如果任意参数为 null,或 rest 为 null

EnumSetenumSet = EnumSet.of(Weather.Sunny, Weather.Rainy);

for(Iteratoriter = enumSet.iterator(); iter.hasNext();){

System.out.println(iter.next());

}

2.2、noneOf方法

public static EnumSetnoneOf(ClasselementType)

创建一个具有指定元素类型的空枚举 set。

参数:

elementType - 此枚举 set 的元素类型的 class 对象

抛出:

NullPointerException - 如果 elementType 为 null

EnumSetenumSet2 = EnumSet.noneOf(Weather.class);

enumSet2.add(Weather.Sunny);

enumSet2.add(Weather.Rainy);

for(Iteratoriter = enumSet2.iterator(); iter.hasNext();){

System.out.println(iter.next());

}

3、List保存枚举类型:

Listlist = new ArrayList();

list.add(Weather.Sunny);

list.add(Weather.Cloudy);

for(Iteratoriter = list.iterator(); iter.hasNext();){

System.out.println(iter.next());

}

4、EnumMap类:

public class EnumMap

extends AbstractMap

implements Serializable, Cloneable

与枚举类型键一起使用的专用 Map 实现。枚举映射中所有键都必须来自单个枚举类型,该枚举类型在创建映射时显式或隐式地指定。枚举映射在内部表示为数组。此表示形式非常紧凑且高效。

枚举映射根据其键的自然顺序 来维护(该顺序是声明枚举常量的顺序)。在 collection 视图(keySet()、entrySet() 和 values())所返回的迭代器中反映了这一点。

EnumMap

public EnumMap(ClasskeyType)

创建一个具有指定键类型的空枚举映射。

参数:

keyType - 此枚举映射的键类型的 class 对象

抛出:

NullPointerException - 如果 keyType 为空

Map enumMap = new EnumMap(Weather.class);

enumMap.put(Weather.Sunny, "晴天");

enumMap.put(Weather.Rainy, "雨天");

5、枚举在实际开发中的使用:

public static String getString(Weather weather){

if(weather == Weather.Sunny){

return Weather.Sunny.getValue();

} else if(weather == Weather.Rainy){

return Weather.Rainy.getValue();

} else if(weather == Weather.Cloudy){

return Weather.Cloudy.getValue();

}

return "不符合的天气情况";

}

调用上面的方法:

Weather weather3 = Weather.Sunny;

System.out.println(getString(weather3));

6、静态导入:

如果要使用静态变量或者方法,必须给出该方法所在的类。而使用静态导入可以使被导入类的所有静态变量和静态方法在当前类直接可见,这样就无需给出他们的类名了:

如加入以下导入语句:

import static java.util.EnumSet.noneOf;

就可以直接使用这个静态方法了:

EnumSetenumSet2 = noneOf(Weather.class);

enumSet2.add(Weather.Sunny);

enumSet2.add(Weather.Rainy);

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值