答案其實很簡單,都是非常基礎的東西,但是平時可能不太在意這些細節,在找的時候也有可能不太確定(對我來說
)。
答案如下:
答案如下:
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){
}
}
}
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元

