程序员

java泛型解析

2020-05-17  本文已影响0人  jimdear
  1. 为什么需要泛型?
    如果我们写的程序, 都用固定类型的话,那么当类型需要发生变化的时候,我们很难去做扩容。 比如,一个类型是string的,你要变成class 对象,这时候,你就没辙了。

2.泛型有啥用呢?
贴下代码,很直观:


public class GenericDemo<T> {

        private T value;
 
        public T getValue() {
            return value;
        }

        public void setValue(T value) {
            this.value = value;
        }
        
 
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        GenericDemo  gen =new GenericDemo ();
        gen.setValue(123);
        System.out.print(gen.getValue());
            
    }

}

此处定义了一个泛型, 程序在print的时候, 不需要对相应的value参数进行关注, 只要关注其value值就可以了。 如果规定了相应的类型的话, 那么其set 的操作,如果传入int 类型的参数,则编译就通不过了。看到这,真感觉java 设计的真友好。

image.png

3.什么是泛型的上下界?
此处我个人理解,泛型的上下界,当你声明了其继承的类型,如果出现相应的非此类型的,参数,那么是不合法的,也就是说类型实参只准传入某种类型的父类或某种类型的子类。为泛型添加上边界,即传入的类型实参必须是指定类型的子类型。如图:


image.png

4.什么是泛型的通配符?
先上代码:


image.png

很明显,编译器报错了, 不能换相应类型,那么怎么弄呢?


通配符.png

此处的?就是通配符。贴上定义: 此处’?’是类型实参,而不是类型形参 。重要说三遍!此处’?’是类型实参,而不是类型形参 ! 此处’?’是类型实参,而不是类型形参 !再直白点的意思就是,此处的?和Number、String、Integer一样都是一种实际的类型,可以把?看成所有类型的父类。是一种真实的类型。可以解决当具体类型不确定的时候,这个通配符就是 ? ;当操作类型时,不需要使用类型的具体功能时,只使用Object类中的功能。那么可以用 ? 通配符来表未知类型。

5.如何理解java 泛型接口?
首先我们定义一个接口:


public interface Generator<T> {
    public T next();
}

然后我们在类中去实现这个接口:

public class GenericValue<T extends Integer> implements Generator<T>{
    private T value;
     
    public T getValue() {
        return value;
    }

    public void setValue(T value) {
        this.value = value;
    }

    public T next() {
        // TODO Auto-generated method stub
        return  getValue();
    }
    
}

然后我们在main程序中打印出来:

        GenericValue gen =new GenericValue();
        gen.setValue(123);
        System.out.println(gen.next());
        
image.png

用法其实和之前理解的是一样的, 此处就是接口而已, 而接口的定义就是把一些单独的操作抽离出来,让相应的类去实现相应操作。

  1. 如何提高?
    在平时写程序的时候,多利用java的泛型,比如写mvp的时候, 还有RXJAVA里,去分析他的用法,然后运用到自己的程序里面。
上一篇下一篇

猜你喜欢

热点阅读