泛型和枚举

泛型:

用于解决安全问题,是一个安全机制.

泛型格式;通过<>定义操作的引用数据类型。

使用:当类中要操作的引用数据类型不确定的时候,早起定义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.Enumjava是单一继承)。
原文地址:https://www.cnblogs.com/tanghao666/p/7207441.html