美文网首页
泛型,枚举

泛型,枚举

作者: 云承寒 | 来源:发表于2017-05-13 17:37 被阅读0次

泛型的用处

  • 将运行时的异常提前至了编译时
  • 避免了无谓的强制类型转换

自定义泛型

  • 自定义泛型就是一个数据类型的占位符或者是一个数据类型的变量。

  • 自定义泛型的命名符合标识符的规则即可,但时,一般用大写字母T(Type) 或 E (Element)表示。

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

相关文章

  • 03_TypeScript学习(三)

    一. TypeScript枚举类型 二. 枚举类型的值 三. 认识泛型 四. 泛型实现类型参数化 五. 泛型的基本...

  • 泛型,枚举

    泛型的用处 将运行时的异常提前至了编译时 避免了无谓的强制类型转换 自定义泛型 自定义泛型就是一个数据类型的占位符...

  • 问题:泛型类,泛型结构体,泛型协议的功能特性都包含在Swift中

    Swift 包含泛型类,泛型结构体特性。泛型可以在类、结构体、枚举、全局函数或者方法中使用。 泛型协议是通过typ...

  • JavaSE 枚举+泛型

  • 枚举&泛型

    简介 枚举是一种特殊的类,创建枚举类的关键字是enum,通常用于设置常量,枚举限制变量只能是预先设定好的值。使用枚...

  • 可选类型的本质

    从上面的代码,不难看出,Optional是一个枚举,而枚举里面加入了一个泛型,如果我们赋值泛型为Int,那么这个可...

  • JavaSE基础知识学习-----泛型

    泛型 Java泛型是jdk1.5的一个新特性,jdk的性特性还包括:泛型,枚举,装箱和拆箱,可变参数等。这里先主要...

  • 枚举类型与泛型

    枚举类型的常用方法 常用的被泛型化的集合类

  • 每天学一点Swift----泛型(一)

    一.泛型的作用 1.泛型是一种非常灵活的语法,泛型允许程序在函数、枚举、结构体、类中定义类型形参,这种类型形参实际...

  • Dart系列-枚举、泛型

    周末学习了一下Dart语言,按照慕课网Flutter开发第一步-Dart编程语言入门[https://www.im...

网友评论

      本文标题:泛型,枚举

      本文链接:https://www.haomeiwen.com/subject/qrbxxxtx.html