泛型,枚举

2017-05-13  本文已影响0人  云承寒

泛型的用处

自定义泛型

1.方法上自定义泛型
修饰符 <声明的自定义泛型> 返回值类型 函数名(使用的自定义泛型...) {

    
}

public <T> T test(T t) {

    return t;
}
2.泛型类
class 类名<声明自定义泛型>{


}

class Test<T> {

    public void add(T t) {

    }

    public T remove(T t) {
        return t;
    }
}

注意
1.泛型类定义的泛型的具体数据类型,是在使用该类创建对象时确定的。
2.当使用泛型类创建对象时,没有指定具体的泛型数据类型,则默认为Object。
3.泛型类上的自定义泛型,不能作用于静态方法。
4.静态方法如果要使用自定义泛型,需要自己声明使用。
3.泛型接口
interface 接口名<声明自定义泛型> {

    返回值类型 函数名(使用的自定义泛型...);
}

interface Test<T> {

    T add(T t);
}

//如果要延长接口自定义泛型的具体数据类型,那么格式如下
class ImpTest<T> implements Test<T> {

    @Override
    public T add(T t) {
        return null;
    }
}

注意
1.泛型接口定义的泛型的具体数据类型,是在实现接口的时候确定的。
2.当使用泛型接口时,没有指定具体的泛型数据类型时,则默认为Object类型。

泛型的上下限
限制上下限需要通配符:?

上限:? super 目标类
下限:? extends 目标类
1.泛型的上限

定义一个函数可以接收任意数据类型的集合对象,要求接收的集合对象只能存储Integer或者其父类类型的数据。

public static<T> Collection<? super Integer> test(Collection<? super Integer> t) {

        return t;
}
2.泛型的下限

定义一个函数可以接收任意数据类型的集合对象,要求接收的集合对象只能存储Number或者其子类类型数据。

public void test(Collection<? extends Number> collection) {

}
泛型的擦除转换

泛型编译之后就消失(擦除)。
当把带有泛型的集合赋给不带泛型的集合,此时泛型就被擦除(手动擦除)。

    ArrayList<Integer> arrayList = new ArrayList<>();
        ArrayList arrayList2 = new ArrayList<>();
        //泛型擦除
        arrayList2 = arrayList;
        arrayList2.add("Test");
        System.out.println(arrayList2);

枚举

enum Demo {
    MAN, WOMAN;
}
枚举应用场景

如果存在多个数据选项,但每次只能选择一个时,可以用枚举。

枚举注意细节

1.枚举是一个特殊的类,枚举值必须位于枚举类的第一行。

2.枚举类的构造方法默认的修饰符是private,自定义的构造函数也要是private。

3.枚举值默认的修饰符是public static final,可以定义自己的成员变量与成员函数

4.枚举值的数据类型是该枚举值所属类的类型,然后枚举值是指向了本类的对象的。

5.枚举类可以存在抽象方法,但是枚举值必须要实现抽象的方法。

 public static void main(String[] args) {
        Demo demo = Demo.MAN;
        demo.value = "测试数据";
        demo.run();
}

enum Demo {
    MAN("男") {
        @Override
        public void run() {
            System.out.println("男人疾跑:" + value);
        }
    }, WOMAN("女") {
        @Override
        public void run() {
            System.out.println("女生慢跑:" + value);
        }
    };

    String value;

    Demo(String value) {
        this.value = value;
    }

    public abstract void run();
}
enum EnumDemo {
    MAN, WOMAN
}

public class Main {

    public static void main(String[] args) {
        demo(EnumDemo.MAN);
    }

    public static void demo(EnumDemo demo) {
        switch (demo) {
            case MAN:
                System.out.println("男");
                break;

            case WOMAN:
                System.out.println("女");
                break;
        }
    }
}
上一篇下一篇

猜你喜欢

热点阅读