Java范型是在Java5.0(1.5)版本中提出的,虽然Oracle已经发布了Java 1.9,Java 12的feature也已经在讨论中,但对于很多程序员来讲,对范型的理解和运用并不好,接下来的系列文章带大家一起深入理解Java范型。该系列问题第一篇先请感兴趣的同学看一些范型相关的问题,答案随后给出。
1、定义两个List:
List numbers = newArrayList();
List integers = new ArrayList<>();
有个方法:
public static void printItem(Listlist) {
for (Numbernumber : list) {
System.out.println(number+ "");
}
}
问:printItem(numbers)和printItem(integers)是否有问题?
2、声明一个List
1) list.add(2L);
2) list.add(1);
3) list.add(1.0);
4) list.add(null);
5) list.add(new Object());
3、声明一个list,List>list = new ArrayList<>();
以下语句哪些是对的?
1) list.add("a");
2) list.add(1);
3) list.add(new Object())
4) list.add(null);
4、针对上一问题,如果把list改为List
4个选项哪些是正确的?
5、声明一个List extends Number>extendsNumberList = new ArrayList<>();
以下选项哪些是正确的?
1) list.add(2L);
2) list.add(1);
3) list.add(null);
6、声明一个List super Number> superNumberList= new ArrayList<>();
以下选项哪些是正确的?
1) list.add(2L);
2) list.add(1);
3) list.add(1.0);
4) list.add(null);
5) list.add(newObject());
7、通过上述两题,请说出在范型中extends和super关键字的用法,可以通过一个具体的类来说明,例如List
vs List super Number>
。
8、声明一个List
,以下代码片段编译、执行都正常吗:
if(intList instanceof List){
System.out.println("List is list");
}
9、声明一个List
,代码片段编译、执行都正常吗:
if(intList instanceof List){
System.out.println("List is list");
}
10、Java引入范型(Generics)的目的有哪些?
11、以下代码片段编译、运行是否有问题?
public class GenericTest{
interface Int{
void m1();
}
static class Clz{
void m2(){
System.out.println("in Clz m2");
};
}
static class Gclz{
void printClz(T t){
System.out.println("T:" + t.getClass().getName());
System.out.println("T:" + t.getClass().getSimpleName());
t.m1();
t.m2();
}
}
static class AnyClz extends Clz implements Int{
@Override
public void m1() {
System.out.println("in AnyClz m1");
}
}
public static void main(String ... args){
AnyClz anyClz = new AnyClz();
Gclz gclz = new Gclz<>();
gclz.printClz(anyClz);
}
}
12、如下两个方法签名能否定义在同一个类中,为什么?
public static void printList(List> list){...}
public static void printList(List
13、定义一个List
,调用上题中定义的两个方法打印list元素,是否有问题?