安卓4_泛型

泛型:可以近似理解为C语言中的宏定义对

0.定义一个泛型类

ps: 对于包装类型变量,是可以直接获得变量名的
eg: a.getClass().getTypeName();

//此处标识符T 可以随意写
public class Generic<T> { //泛型类的<>定义在名称后面
    private T s;

    public void a(T a) { //作为参数
        System.out.print(a + " ");
        System.out.println(a.getClass().getTypeName()); 
    }

    public <T> void aa(T a) { //泛型方法的<>定义在返回值类型前面
        System.out.print(a + " ");
        System.out.println(a.getClass().getTypeName());
    }

    public static <T> void aaa(T a) {
        System.out.print(a + " ");
        System.out.println(a.getClass().getTypeName());
    }
}

1.泛型类的使用

(0)直接使用
public class Main {

    public static void main(String[] args) {
        Generic<String> a = new Generic<>();
        Generic<Integer> b = new Generic<>();

        //方法a的泛型与new的泛型类一致
        a.a("a");
        b.a(1);

        //方法aa的泛型与传入的参数相关
        a.aa(2);
        b.aa("b");

        Generic.aaa("static");
    }
}
运行结果
(1)继承使用
public class Main {

    public static void main(String[] args) {
        // Number 是 ?(未知类型) 的父类
        Generic<? super Number> generic = new Generic<>();
        generic.a(1.2);
        generic.a(1);
        generic.a(2.6f);
    }
}
运行结果
(2)类的泛型定义

ps: 找类名的方法 a.getClass()

public class Main {

    public static void main(String[] args) {

        Class<? extends AA> aClass1 = AA.class; //常用1
        System.out.println(aClass1);

        try {
            Class<?> aClass2 = Class.forName("com.company.Main$AA"); //"完整类名"
            System.out.println(aClass2);
        } catch (ClassNotFoundException e) {
            System.out.println("类名未找到");
        }

        AA aClass3 = new AA(); //常用2
        System.out.println(aClass3.getClass());
    }

    private static class AA extends CC{
        @Override
        public String toString() {
            return "AA";
        }
    }
    private static class BB extends AA{
        @Override
        public String toString() {
            return "BB";
        }
    }
    private static class CC implements DD {
        @Override
        public String toString() {
            return "AA";
        }
    }
    private interface DD{} //接口
}
运行结果
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容