正在学习泛型的相关知识,定义的一个MyGene<T>自定义数据容器类保存Person和其子类型,想定义个getLast方法获得容器中最后一个元素的值。但是方法的泛型返回值无法通过,具体错误如下:
*************************
TestGene2.java:4: 错误: 方法声明无效; 需要返回类型
public static <T extends Person> getLast(MyGene<T> mg){
^
1 个错误
*************************
高手请帮我看看,先谢了!!!import java.util.*;
class TestGene2
{
public static <T extends Person> getLast(MyGene<T> mg){ //此行出问题,
return mg.get(mg.size()-1);
}
public static void main(String[] args)
{
System.out.println("Hello World!");
MyGene<Person> mg1 = new MyGene<Person>();
mg1.add(new Person());
mg1.add(new Person("lisi"));
mg1.add(new Teacher("wangmazi","008"));
System.out.println(mg1);
MyGene<Teacher> mg2 = new MyGene<Teacher>();
mg2.add(new Teacher());
mg2.add(new Teacher("009"));
System.out.println(mg2);
}
}class MyGene<T extends Person>{
List<T> al;
MyGene(){
al= new ArrayList<T>(10);
}
MyGene(List<T> c){
al= new ArrayList<T>(c);
}
T get(int index){
return al.get(index);
}
void add(T item){
al.add(item);
}
void set(int index, T item){
al.set(index,item);
}
public String toString(){
String str="";
str+="[";
for (T ele : al){
str += ele.toString()+", ";
}
str+="]";
return str;
}
}class Person{
String name;
Person(){
name = "zhangsan";
}
Person(String n){
name = n;
}
public String toString(){
return name;
}
}
class Teacher extends Person{
String hireNo;
Teacher(){
hireNo="007";
}
Teacher(String hn){
super();
hireNo =hn;
}
Teacher(String n, String hn){
super(n);
hireNo =hn;
}
public String toString(){
return super.toString()+":"+ hireNo;
}
}
*************************
TestGene2.java:4: 错误: 方法声明无效; 需要返回类型
public static <T extends Person> getLast(MyGene<T> mg){
^
1 个错误
*************************
高手请帮我看看,先谢了!!!import java.util.*;
class TestGene2
{
public static <T extends Person> getLast(MyGene<T> mg){ //此行出问题,
return mg.get(mg.size()-1);
}
public static void main(String[] args)
{
System.out.println("Hello World!");
MyGene<Person> mg1 = new MyGene<Person>();
mg1.add(new Person());
mg1.add(new Person("lisi"));
mg1.add(new Teacher("wangmazi","008"));
System.out.println(mg1);
MyGene<Teacher> mg2 = new MyGene<Teacher>();
mg2.add(new Teacher());
mg2.add(new Teacher("009"));
System.out.println(mg2);
}
}class MyGene<T extends Person>{
List<T> al;
MyGene(){
al= new ArrayList<T>(10);
}
MyGene(List<T> c){
al= new ArrayList<T>(c);
}
T get(int index){
return al.get(index);
}
void add(T item){
al.add(item);
}
void set(int index, T item){
al.set(index,item);
}
public String toString(){
String str="";
str+="[";
for (T ele : al){
str += ele.toString()+", ";
}
str+="]";
return str;
}
}class Person{
String name;
Person(){
name = "zhangsan";
}
Person(String n){
name = n;
}
public String toString(){
return name;
}
}
class Teacher extends Person{
String hireNo;
Teacher(){
hireNo="007";
}
Teacher(String hn){
super();
hireNo =hn;
}
Teacher(String n, String hn){
super(n);
hireNo =hn;
}
public String toString(){
return super.toString()+":"+ hireNo;
}
}
public static <T extends Person> getLast(MyGene<T> mg){ //此行出问题你这个方法的方法签名都不完整,你的方法没有定义返回值。前面的泛型代表的不是返回值,这是一个泛型方法,代表在此方法中T就是你定义的泛型
既然是泛型,个人觉得没必要定义这么复杂的类型形参,直接public static <T > T getLast(MyGene<T> mg),因为最终你都需要强制转换为你需要的类型。