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();
}