上次已经为大家介绍过java泛型方法是怎样的有关内容了。今天要简述的也是与之相关的内容,也就是关于泛型类的有关知识。一起来了解一下吧。
首先我们需要知道的是,泛型类的声明和非泛型类的声明类似,除了在类名后面添加了类型参数声明部分和泛型方法一样,泛型类的类型参数声明部分也包含一个或多个类型参数,参数间用逗号隔开。一个泛型参数,也被称为一个类型变量,是用于指定一个泛型类型名称的标识符。因为他们接受一个或多个参数,这些类被称为参数化的类或参数化的类型。
实例代码如下所示:
public class Box < T > { private T t; public void add(T t) { this.t = t; } public T get() { return t; } public static void main(String[] args) { Box < Integer > integerBox = new Box < Integer > (); Box < String > stringBox = new Box < String > (); integerBox.add(new Integer(10)); stringBox.add(new String("奇Q教程")); System.out.printf("整型值为 :%d\n\n", integerBox.get()); System.out.printf("字符串为 :%s\n", stringBox.get()); } }
编译以上代码,运行结果如下所示:
整型值为: 10 字符串为: 奇Q教程
然后来了解一下,类型通配符
1、类型通配符一般是使用?代替具体的类型参数。例如List在逻辑上是List
实例代码如下所示:
import java.util.*; public class GenericTest { public static void main(String[] args) { List < String > name = new ArrayList < String > (); List < Integer > age = new ArrayList < Integer > (); List < Number > number = new ArrayList < Number > (); name.add("icon"); age.add(18); number.add(314); getData(name); getData(age); getData(number); } public static void getData(List < ? > data) { System.out.println("data :" + data.get(0)); } }
输出结果为:
data: icon data: 18 data: 314
解析:因为getData()方法的参数是List类型的,所以name,age,number都可以作为这个方法的实参,这就是通配符的作用。
2、类型通配符上限通过形如List来定义,如此定义就是通配符泛型值接受Number及其下层子类类型。
实例代码如下所示:
import java.util.*; public class GenericTest { public static void main(String[] args) { List < String > name = new ArrayList < String > (); List < Integer > age = new ArrayList < Integer > (); List < Number > number = new ArrayList < Number > (); name.add("icon"); age.add(18); number.add(314); //getUperNumber(name);//1 getUperNumber(age); //2 getUperNumber(number); //3 } public static void getData(List < ? > data) { System.out.println("data :" + data.get(0)); } public static void getUperNumber(List < ? extends Number > data) { System.out.println("data :" + data.get(0)); } }
输出结果如下所示:
data: 18 data: 314
解析: 在(//1)处会出现错误,因为getUperNumber()方法中的参数已经限定了参数泛型上限为Number,所以泛型为string是不在这个范围之内,所以会报错。
3、类型通配符下限通过形如List来定义,表示类型只能接受Number及其三层父类类型,如Object类型的实例。
上面的内容已经详细为大家解析了java中泛型类是什么以及类型通配符是什么的主要内容了。具体的知识还是很好理解的。如果你对java知识感兴趣,想要了解更多java常见问题,敬请关注奇Q工具网。
推荐阅读: