这个类里有多少错误?(答案)

答案其实很简单,都是非常基础的东西,但是平时可能不太在意这些细节,在找的时候也有可能不太确定(对我来说 :))。

答案如下:


import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

import org.junit.Test;


public class GenericTest {

static class Person {
public void m(Collection<Person> persons) {

}
}

//泛型声明要放在返回值的前面,所以<T>要放在void前面
static class Employee extends Person {
public void <T> isManager() {
}

}

//泛型不具有协变性,所以下面是编译不了的
static class Student extends Person {
public void m2(Collection<Student> students) {
super.m(students);
}

}


//数组具有协变性,对于用父类声明的子类数组,在设置其他子类对象的时候虽然编译不报错,但是运行时会抛出ArrayStoreException
@Test(expected=ArrayStoreException.class)
public void arrayStoreExceptionTest() {
Person[] persons = new Employee[5];
persons[0] = new Employee();
persons[1] = new Student();
}

//下面是正确的
@Test
public void arrayStoreTest() {
Person[] persons = new Person[2];
persons[0] = new Employee();
persons[1] = new Student();
}
//下面语句在编译时就会出错,体现出泛型列表不具有协变性
public void genericTest() {
List<Person> personList = new ArrayList<Employee>();
}




//static方法和static域均不可引用类的泛型变量,下例中即T
static class Generic<T> {

static T t;

static void method1(T t) {

}
void m1(T t){

}

}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值