Android开发(Java部分)——泛型

泛型:任意的类型
在定义类或者接口的时候 需要操作数据 但是不清楚使用者需要哪种数据
定义类、接口、变量、方法

在定义的时候可以使用泛型来代表任意的类型,但在使用的时候(定义变量、创建对象)必须传递实际类型
创建对象的时候使用变量去保存对象,这个时候变量类型需要声明具体类型 new后面可以省略


MyClass.java
import java.util.Collection

//泛型类
class Test<E>{
    E var1;
}

//泛型接口
interface ITest<T>{
    void test(T t);
}

//类继承一个接口时
//方法一:指定接口的类型
//class MyTest implements ITset<String>{
//  @Override
//  public void test(String s) {
//
//  }
//}

//方法二:指定当前类为泛型
class MyTest<T> implements ITest<T>{
    @Override
    public void test(T t) {

    }
}


//泛型方法
//必须在方法前使用<T>来表示需要使用泛型
class Foo{
    public<T> void test(T t){
        System.out.println(t);
    }

    public void showList(List<?> list){
        for (int i = 0; i < list.size(); i++){
            System.out.println(list.get(i));
        }
    }
}

//Child cd;
//Father f = cd;
//注意Java的集合类型是不会自动变型  List<Child>  List<Father>
//? 通配符
//在使用一个泛型时,如果还不确定到底是什么类型,可以使用?来表示任意类型
//List<String> -> List<Object>

//设置泛型的上限 extends
class Cat{
    
}
interface IFood{
    
}
class Milk implements IFood{

}
class TianyouMilk extends Milk{

}
//指定传递过来的类型的父类必须是IFood
class Student<T extends IFood> {
    public void eat(T t){
        
    }
}


public class MyClass {
    public static void main(String[] args){
        
        
    }

    public void t4(){
        Student<Milk> xw;
        Student<TianyouMilk> zs;
        //Student<Cat> zt;
    }

    public void t3(){
        //Foo foo = new Foo();
        //new ArrayList<String> names = new ArrayList<>();
        //names.add("jack");
        //names.add("merry");
        //foo.test(t: );

        Foo foo = new Foo();
        List<String> names = new ArrayList<>();
        names.add("jack");
        names.add("merry");
        foo.showList(names);
    }

    public void t2(){
        //ITest<String> test = new MyTest<>();
        
        //使用匿名内部类对象
        ITest<List<String>> test = new ITest<List<String>>() {
            @Override
            public void test(List<String>strings) {
                
            }
        };
    }

    public void t1(){
        //在使用的时候(定义变量、创建对象)必须传递实际类型
        Test<String> test;
        new Test<String>();

        //创建对象的时候使用变量去保存对象
        //这个时候变量类型需要声明具体类型 new后面可以省略
        Test<String> test2 = new test<>();
        test2.var1 = "jack";
        
        System.out.println(test2.var1.getClass());
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 简介 泛型的意思就是参数化类型,通过使用参数化类型创建的接口、类、方法,可以指定所操作的数据类型。比如:可以使用参...
    零度沸腾_yjz阅读 3,320评论 1 15
  • “泛型”这个术语的意思是:"适用于许多许多的类型”。如何做到这一点呢,正是通过解耦类或方法与所使用的类型之间的约束...
    王侦阅读 1,161评论 0 0
  • 开发人员在使用泛型的时候,很容易根据自己的直觉而犯一些错误。比如一个方法如果接收List作为形式参数,那么如果尝试...
    时待吾阅读 1,072评论 0 3
  • 成功若是很简单,还要我们这些平民百姓做什么,没有我们这些平民百姓,又怎么能体现出成功人士的不同。 相信所有的人在...
    3乘以三阅读 215评论 0 1
  • 今日能量早餐 对应脉络♂海底轮:红色 海底轮活跃: 会有身植大地的感受,感觉稳定,安全,不会...
    jess橙子阅读 130评论 0 0