泛型<>;添加指定的类型
泛型的使用
1.泛型类
2.泛型方法
3.泛型接口
泛型类
/**
* 此处的泛型T可以任意取名 ,一般使用T,type
*/
class A<T>{
private T key;
public void setKey(T key) {
this.key=key;
}
public T getKey() {
return this.key;
}
}
A<String> a1=new A<String>();//在new A的对象指定泛型的类型是String
a1.setKey("xxx");//对象在使用setKey方法中key的形参就是String
String s=a1.getKey();
泛型接口 interface
interface IB<T>{
T test(T t);
}
/**
- 未传入泛型实参时,与泛型类的定义相同
- 在声明类的时候,需要将泛型类的声明也一起加到类中
- @author Daybreak
- @param
*/
class B1<T> implements IB<T>{
public T test(T t) {
// TODO 自动生成的方法存根
return t;
}
/**
- 如果实现接口时 指定了接口泛型的具体数据类型
- 这个类实现接口所有方法的位置都要泛型替换实际的具体类型
- @author Daybreak
*/
class B2 implements IB<String>{
@Override
public String test(String t) {
// TODO 自动生成的方法存根
return t;
}
泛型方法
泛型方法,在调用之前没有固定的数据类型
在调用时,传入的参数是是那么类型,就会把泛型改成什么类型
即,泛型方法会在调用时决定他的类型
/**
* 无返回值的泛型方法
* @author Daybreak
*
*/
class Cc{
public <T> void test(T s) {
}
/**
* 有返回值的泛型方法
* @param s
* @return
*/
public <T> T test1(T s) {
return s;
}
/**
* 形参为 可变参数的泛型方法
* @param strs
*/
public<T> void test2(T...strs) {
for(T s:strs) {
System.out.println(s);
}
}
泛型 通配符
test方法需要一个list集合的参数,不确定list集合到底存的是什么类型
public void test(List<?> list)
枚举类enum
枚举类可以实现接口
public class Test3 {
public static void main(String[] args) {
Season spring=Season.SPRING;
spring.showInfo();
Season summer=Season.SUMMER;
summer.showInfo();
}
}
enum Season{
SPRING("春天","春风习习"),//
SUMMER("夏天","烈日炎炎"),
AUTUMN("秋天","硕果累累"),
WINTER("冬天","白雪皑皑");
private final String name;
private final String desc;
private Season(String name,String desc) {
this.name=name;
this.desc=desc;
}
public void showInfo() {
System.out.println(this.name+" :"+this.desc);
}