欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-07-14 19:04:54
...
答案其实很简单,都是非常基础的东西,但是平时可能不太在意这些细节,在找的时候也有可能不太确定(对我来说这个类里有多少错误?(答案)
            
    
    博客分类: Java Core java )。

答案如下:

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){
			
		}
		
	}
}

相关标签: java