栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java中泛型需要注意的点以及泛型方法(2022.5.14)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java中泛型需要注意的点以及泛型方法(2022.5.14)

泛型中需要注意的点

  • 泛型中可以存放多个参数类型
    package zhai.Fx;
    // 泛型中可以定义多个参数类型,方便放入多个参数类型进行存放
    public class FxDemo4 {
       A age;
       B name;
       C sex;
       public void Test(A a,B b,C c){
    
       }
    }
  • 泛型类的构造器写法不能带泛型参数
     public FxDemo4 (){  // 这样编写的构造器是错误的,构造器不支持这种带泛型的写法
          错误写法!
     }
  • 泛型引用类型不同时不可以相互赋值
    public void a(){
           ArrayList list1 = null;
           ArrayList list2 = null;
           list1 = list2;
       }
  • 如果定义的反应不指定参数类型,泛型就会被抹掉,并且提供默认类型为Object
      public static void main(String[] args) {
            // 使用类不指定泛型
            FxDemo3 fx1 = new FxDemo3();
            fx1.a("zhangsan");
            fx1.a(12);
            fx1.a(1314.00);
            fx1.b(new Integer[]{1,2,3});
            // 只要不指定泛型的参数类型,就会默认提供默认参数类型为Object类型
        }
  • 泛型中的静态方法不能使用类的泛型,注意:在泛型类中不能使用静态方法
     public static int b(A a){  // 此时这个参数类型A会报错
       // 因为static关键字跟类同时加载,就是还没创建对象就已经加载了,这时候A的类型还没有指定,所以它跟上面的A是不同步的,这时候就会报错。
           return a;
       }
  • 不能直接创建A类型的数组
        public void c(A a){
    //       A[] i = new A[10];  这样 new 出来的数组是错误的,因为没有指定数组类型
            A[] i = (A[])new Object[1];  // 需要强转为A数组类型,其实这个数组类型就是Object
     }

泛型方法

什么是泛型方法?

  • 并不是方法的参数中带泛型就是泛型方法;
  • 而是泛型方法中的参数类型和当前类的泛型参数类型不相同;
  • 方法访问修饰符后面加上,才称为放行方法。
    package zhai.Fx;
    
    public class FxDemo5 {
        public void a(E e){
            // 不是泛型方法
        }
        public void b(T e){
            // 是泛型方法
        }
    }

泛型方法的使用:

  • 首先泛型方法可以为静态方法,因为它是在调用时才会确定参数类型,所以不牵扯创建对象
  • 泛型中不存在继承关系,如:G 和 G A、B不会存在继承关系的,它们是并列的关系
    package zhai.Fx;
    
    public class FxDemo5 {
        public void a(E e){
            // 不是泛型方法,不能为静态方法 因为静态方法是跟类一起加载的,它因为没有确定类型就不能使用
        }
        public static  void b(T e){
            // 是泛型方法,可以为静态方法
            // 因为只有调用时才会指定类型,所以不牵扯创建对象,可以跟类同时加载
        }
    }
    class Demo1{
        public static void main(String[] args) {
            FxDemo5 stringFxDemo5 = new FxDemo5();
            stringFxDemo5.a("123123");
            stringFxDemo5.b(123);
            stringFxDemo5.b("zhangsan"); // 这个泛型方法是在调用时,才确定参数类型
        }
    }

    package zhai.Fx;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class FxDemo6 {
        public static void main(String[] args) {
            Object o = new Object();  // 父类
            String s = new String();  // 子类
            o = s;  // 父类引用指向子类的对象
    
            Object[] o1 = new Object[]{123};
            String[] s2 = new String[]{"123"};
            o1 = s2;
    
            List list1 = new ArrayList<>();
            ArrayList list2 = new ArrayList<>();
    //        list1 = list2;
            // 总结:A 和 B 是子类父类的关系,但是 G 和 G 不存在继承关系的,是并列关系
        }
    }


转载请注明:文章转载自 www.mshxw.com
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号