java泛型解析
2020-05-17 本文已影响0人
jimdear
- 为什么需要泛型?
如果我们写的程序, 都用固定类型的话,那么当类型需要发生变化的时候,我们很难去做扩容。 比如,一个类型是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.png3.什么是泛型的上下界?
此处我个人理解,泛型的上下界,当你声明了其继承的类型,如果出现相应的非此类型的,参数,那么是不合法的,也就是说类型实参只准传入某种类型的父类或某种类型的子类。为泛型添加上边界,即传入的类型实参必须是指定类型的子类型。如图:
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
用法其实和之前理解的是一样的, 此处就是接口而已, 而接口的定义就是把一些单独的操作抽离出来,让相应的类去实现相应操作。
- 如何提高?
在平时写程序的时候,多利用java的泛型,比如写mvp的时候, 还有RXJAVA里,去分析他的用法,然后运用到自己的程序里面。