泛型和枚举
Posted 唐浩199
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了泛型和枚举相关的知识,希望对你有一定的参考价值。
泛型:
用于解决安全问题,是一个安全机制.
泛型格式;通过<>定义操作的引用数据类型。
使用:当类中要操作的引用数据类型不确定的时候,早起定义Object来完成扩展,现在定义泛型类来扩展。 泛型类定义的泛型,在整个类中有效,如果被方法是用,那么泛型类对象的明确要操作的具体类型。所有方法类型不确定,那么可以将泛型定义在方法上。
public <T> T print(T t){//<T>定义泛型 T返回类型
return t;
}
静态泛型方法:
1、静态方法不可以访问类上定义的泛型。
2、如果静态方法操作的引用数据类型不确定,可以将泛型定义在方法上。
public static <T> void menthods(T t){
}
泛型限定:
public static void print(ArrayList<? extends Person> aa){
}
<?>通配符
<? extends(继承) object(类的上限)>
<? super Student(类的下限)>
枚举:
关键字:enum
语法定义: 创建枚举类型要使用 enum 关键字,隐含了所创建的类型都是 java.lang.Enum 类的子类(java.lang.Enum 是一个抽象类)。枚举类型符合通用模式 Class Enum<E extends Enum<E>>,而 E 表示枚举类型的名称。枚举类型的每一个值都将映射到 protected Enum(String name, int ordinal) 构造函数中,在这里,每个值的名称都被转换成一个字符串,并且序数设置表示了此设置被创建的顺序。
public enum Meiju {
Yellow("黄色",1),blue("蓝色",2),red("红色",3);
private String name;
private int index;
private Meiju(String name,int index){
this.name=name;
this.index=index;
}
public void setName(String name){
this.name=name;
}
public String getName(){
return name;
}
public void setNum(int index){
this.index=index;
}
public int getNum(){
return index;
}
}
public class MeijuTest {
public static void main(String[] args) {
// System.out.println(Meiju.blue.getName());
for(Meiju c:Meiju.values()){
System.out.println(c+" 颜色为:"+c.getName()+" 序列为:"+c.getNum());
}
运行结果:
Yellow 颜色为:黄色 序列为:1
blue 颜色为:蓝色 序列为:2
red 颜色为:红色 序列为:3
EnumSet<Meiju> es=EnumSet.allOf(Meiju.class);
System.out.println(es);
运行结果:
[Yellow, blue, red]
//EnumSet
EnumSet<EnumTest> weekSet = EnumSet.allOf(EnumTest.class);
for (EnumTest day : weekSet) {
System.out.println(day); }
//EnumMap
EnumMap<Meiju,String> map=new EnumMap<Meiju,String>(Meiju.class);
map.put(Meiju.blue, "lan");
map.put(Meiju.red, "hong");
map.put(Meiju.Yellow, "huang");
Set<Meiju> set=map.keySet();
Iterator<Meiju> it=set.iterator();
while(it.hasNext()){
Meiju key=it.next();
System.out.println(key+" "+map.get(key));
}
}}
运行结果:
Yellow huang
blue lan
red hong
总结:
enum 的语法结构尽管和 class 的语法不一样,但是经过编译器编译之后产生的是一个class文件。该class文件经过反编译可以看到实际上是生成了一个类,该类继承了java.lang.Enum<E>。所以,实际上 enum 就是一个 class,只不过 java 编译器帮我们做了语法的解析和编译而已。
简单讲: 可以把 enum 看成是一个普通的 class,它们都可以定义一些属性和方法,不同之处是:enum 不能使用 extends 关键字继承其他类,因为 enum 已经继承了 java.lang.Enum(java是单一继承)。
以上是关于泛型和枚举的主要内容,如果未能解决你的问题,请参考以下文章