package com.aggregate.demo;import com.sun.corba.se.spi.ior.IORTemplateList;import java.util.HashSet;import java.util.Iterator;public class set { public static void main(String[] args) { HashSet
public class Test2 { public static void main(String[] args) { A a = new A(); a.setKey("rexx"); String s = a.getKey(); System.out.println(s); }}class A { private T key; public T getKey() { return key; } public void setKey(T key) { this.key = key; }}
泛型接口
定义一个泛型接口
未传入泛型实参时,与泛型类的定义相同,在声明类的时候,需将泛型的声明也一起加到类中
泛型方法
package com.aggregate.demo;public class Test3 { public static void main(String[] args) { B1 b1 = new B1(); B1 b2 = new B1(); B2 b3 = new B2(); Cc cc = new Cc(); cc.test("xxx"); //泛型方法,在调用之前没有固定的数据类型 //在调用时,传入的参数是什么类型,就会把泛型改成什么类型 //也就是说,泛型方法会在调用时确定泛型具体的数据类型 Integer integer = cc.test1(2); Boolean aBoolean = cc.test1(true); }}//定义泛型接口interface IB { T test(T t);}//未传入泛型实参时,与泛型类的定义相同,在声明类的时候,需将泛型的声明也一起加到类中class B1 implements IB { @Override public T test(T t) { return null; }}//传入实际参数//如果实现接口时指定接口的泛型的具体数据类型//这个类实现接口所有方法的位置都要泛型替换实际的具体数据类型class B2 implements IB { @Override public String test(String s) { return null; }}//泛型方法class Cc { public void test() { } //无返回值的泛型方法 public void test(T s) { T t = s; } public String test1(String s) { return s; } //有返回值的泛型方法 public T test1(T s) { return s; } public void test2(String... strs) { for (String s : strs) { System.out.println(s); } } //形参为可变参数的泛型方法 public void test2(T... strs) { for (T str : strs) { System.out.println(str); } }}//带泛型的类可以在类里面定义泛型的变量class Dd { private E e; //静态的泛型方法 public static void test3(T t) { //System.out.println(this.e); //在静态方法中,不能使用类定义泛型,如果要使用泛型,只能使用静态方法自己定义的泛型 System.out.println(t); } //在类上定义的泛型,可以在普通的方法中使用 public void test(T s) { System.out.println(this.e); T t = s; }}
通配符
1.有限制的通配符
(无穷小,Person]只允许泛型为Person及Person子类的引用调用
[Person,无穷大)只允许泛型为Person及Person父类的引用调用
只允许泛型为实现Comparable接口的实现类的引用调用
枚举类
在某些情况下,一个类的对象是有限而且固定的。例如季节类,只能有4个对象。
手动实现枚举类:
private修饰构造器
属性使用private final修饰
把该类的所有实例都使用public static final来修饰
实现接口的枚举类
和普通Java类一样枚举类可以实现一个或多个接口
若需要每个枚举值在调用实现的接口方法呈现出不同的行为方式,则可以让每个枚举值分别来实现该方法
public class Test5 { public static void main(String[] args) { //Season.SPRING,这段执行就是获取一个Season的对象 Season spring = Season.SPRING; spring.showInfo(); Season summer = Season.SUMMER; summer.showInfo(); Season spring1 = Season.SPRING; //每次执行Season.SPRING获得是相同的对象,枚举类中的每个枚举都是单例模式的 System.out.println(spring.equals(spring1)); spring1.test(); }}enum Season implements ITest { SPRING("春", "春暖花开"),//此处相当于调用有参的私有构造 SUMMER("夏", "夏日炎炎"), AUTUMN("秋", "秋高气爽"), WINTER("冬", "寒风凛冽"); private final String name; private final String desc; Season(String name, String desc) { this.name = name; this.desc = desc; } public void showInfo() { System.out.println(this.name + ":" + this.desc); } @Override public void test() { System.out.println("这是实现的ITest接口的test方法"); }}interface ITest { void test();}