Java中泛型的理解

Java中泛型的理解

所谓泛型,是指使程序员定义安全的类型,能够避免强制转换类型时出现的错误不被编译器识别,而运行时却报错。

以下是个人的理解:

在编写Python类或者函数的时候(主要是函数),无需告诉程序返回数据的类型,直接return就行。有很多语言也都是无需声明返回数据的类型的,如PHP,PHP常用于编写接口,然后Java来调用。如果这个接口没有告诉Java接口返回数据的类型的话,Java在编写代码的时候,是不会报错的。举个例子,但如果Java需要的是整型数据,接口却返回了一个浮点型数据,那程序运行就会报错。

这里就体现了泛型的重要性。

泛型的定义

直接上我自己学习写的泛型定义代码

public class Test<T, S> {
    T over;
    S str;


    public T getOver() {
        return over;
    }

    public void setOver(T over) {
        this.over = over;
    }

    public void setStr(S str) {
        this.str = str;
    }

    public S getStr() {
        return str;
    }

    public static void main(String[] args) {
        Test<Boolean, String> b = new Test();
        b.setOver(true);

        boolean b0 = b.getOver();
        System.out.println(b0);

        Test<Boolean, String> s = new Test();
        s.setStr("huangg");
        String str = s.getStr();
        System.out.println(str);
//       int i = b.getOver();
//        Father<Integer, String> f = new Child(1, "2");
//        Child<Integer, String, Boolean> c = new Child(1, false);

    }
}

现在来记录学习体会:

  1. public class Test<T, S> {
        T over;
        S str;
    

    先看这几行代码,在定义类名Test时, 写了<T, S>这个泛型的表达方式,告诉编译器定义的是一个泛型类

    接着,定义了两个泛型的成员变量over和str。如果不好理解的话,可以将这两行代码理解为:

    int over;
    String str;
    

    效果和上面差不多,只是上面的变量不知道是啥类型的。

  2.     public T getOver() {
            return over;
        }
    
        public void setOver(T over) {
            this.over = over;
        }
    
        public void setStr(S str) {
            this.str = str;
        }
    
        public S getStr() {
            return str;
        }
    
    

    这是在定义set和get方法,注意get方法的时候,要写返回值的类型,分别是T和S,与泛型一致就行了。

  3.     public static void main(String[] args) {
            Test<Boolean, String> b = new Test();
            b.setOver(true);
    
            boolean b0 = b.getOver();
            System.out.println(b0);
    
            Test<Boolean, String> s = new Test();
            s.setStr("huangg");
            String str = s.getStr();
            System.out.println(str);
    //       int i = b.getOver();
    //        Father<Integer, String> f = new Child(1, "2");
    //        Child<Integer, String, Boolean> c = new Child(1, false);
    
        }
    

    这是主方法,Test<Boolean, String> b = new Test();主方法首先实例化对象,看这里,在实例化对象的时候,就要定义泛型类型了,第一个是布尔值,第二个是字符串,然后将作为布尔值的over值用set方法设置为true,get方法可以取值,下面的第二个变量用同样的方式取值和设置值。

这就是泛型类的定义方法,和常规类差别不大,但是要注意的是,泛型的名字最好不要和已有的类型重名,这样容易出错。泛型可以有一个,也可以有多个。

泛型的其他用法

除了上述使用方法外,还可以

  • 限制泛型的可用类型,如下:

    public class Text <T extends List>{}

    这里的泛型就限定只能是List类型的子类

  • 使用类型通配符?,如public class Text <? extends List>{}

  • 继承泛型类和实现泛型接口。

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

栀椩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值