Java中的自定义泛型

Java中的自定义泛型,第1张

自定义泛型结构

  • 先定义一个普通类,后面加上<占位符>,这个占位符说是占位其实默认是Object类型
  • 然后在泛型类中自定义方法,并且加上:占位符,变量名
  • 这时候要是给它通过实例化传入一个参数类型的时候,它就会统一为那个参数类型的集合,就只能存储那一种类型的数据。
  • 但是要是父类是泛型类没有指定参数类型,则子类在继承父类时,通过子类指定父类的参数类型,从而实现这个父类中的所有属性方法都为刚才指定的类型集合。
  • 如果父类没有指定泛型类型,而且子类在继承过程中也没有指定泛型类型,这时候子类就会变成一个泛型类;并且只能在实例化子类的时候进行指定参数类型。
    package zhai.Fx;
    
    // 自定义一个普通类
    // 类后面跟上<>参数类型是A,但是这个A又是什么类型呢?这个A现在是不确定的类型只是个占位
    // 但是这个类现在就确定一定是一个引用类型
    // 父类
    public class FxDemo3<E> {
        // 此时这个类就是一个泛型类
        int age;
        String name;
        E sex;  // 这时候的 A 其实是个占位符,默认为 Object 类型
    
        public void a(E n){  // 这个A就默认为Object类型
    
        }
        public void b(E[] m){
    
        }
    }
    // 子类1
    class SubFxDemo3 extends FxDemo3<Integer>{  // 这时候给父类指定参数类型为Integer
    
    }
    
    // 子类2
    class SubFxDemo4<E> extends FxDemo3<E>{  // 此时这个子类和父类中都没有参数类型的话,该子类也就会称为一个泛型类
        // 如果子类没有参数类型就会称为泛型类
        // 只能到实例化时候定义参数类型
    }
    // 测试子类1
    class Demo{
        public static void main(String[] args) {
            SubFxDemo3 subFxDemo3 = new SubFxDemo3();
            subFxDemo3.a(111); // 此时该集合中只能存储Integer类型的数据
            subFxDemo3.b(new Integer[]{1,2,3,4});
        }
    }
    // 测试子类2
    class Demo2{
        public static void main(String[] args) {
            SubFxDemo4<String> s = new SubFxDemo4<>();  // 实例化子类并且定义参数类型为String
            s.a("abc"); // 所以该类中的所有方法属性均为 String 类型
        }
    }
    // 测试父类
    class Test{
        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});
            // 指定泛型创建泛型类 这时候一旦指定参数为String时,泛型类中的所有方法以及属性都统一为String
            FxDemo3<String> objectFxDemo3 = new FxDemo3<>(); // 也就意味着此时这个集合只能存放String类型的数据
        }
    }

注意:可以看出只要一个泛型类中有多个子类的同时,可以根据子类来第一不同的参数类型,进行实例化使用父类中的所有方法以及属性。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/924589.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-16
下一篇 2022-05-16

发表评论

登录后才能评论

评论列表(0条)

保存