黑马程序员技术交流社区
标题:
为什么会在t.getName()出编译错误,求大神伸腿
[打印本页]
作者:
JavaProgrammer
时间:
2015-9-6 15:58
标题:
为什么会在t.getName()出编译错误,求大神伸腿
import java.util.*;
class Generc_Text {
public static void main(String[] args){
Utils<Person> u = new Utils<Person>();
Person p =new Person("张三",23);
u.println(p);
}
}
class Utils<T>{
public void println(T t){
System.out.println(t.getName());
}
public <Y> void show(Y y){
System.out.println(y);
}
}
class Person {
private String name;
private int age;
Person(String name,int age){
this.name = name;
this.age = age;
}
public void setName(String name){
this.name = name;
}
public String getName(){
return name;
}
public void setAge(int age){
this.age = age;
}
public int getAge(){
return age;
}
}
作者:
asinzuo
时间:
2015-9-6 18:57
你这题涉及泛型知识,泛型里就要注意类型转型的问题。
class Utils<T>这里声明的是接收Object型参数,
public void println(T t){
System.out.println(t.getName());
}
这里的t Object型对象,obj里当然没有getName()方法。
你想调用的是Perosn的getName()方法,那么要将t向下转型
改成: System.out.println(((Person) t).getName()); 即可
作者:
asinzuo
时间:
2015-9-6 19:15
比较合理的一种方法:加个判断public void println(T t){
if(t instanceof Person)
System.out.println(((Person) t).getName());
}
20150906191041.jpg
(74.04 KB, 下载次数: 12)
下载附件
2015-9-6 19:15 上传
作者:
asinzuo
时间:
2015-9-6 19:18
正规的方法应该这样
public void println(T t){
if(t instanceof Person)
{
Person per = (Person) t;
System.out.println(per.getName());
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2