黑马程序员技术交流社区
标题:
泛型问题
[打印本页]
作者:
yangshang1
时间:
2012-4-1 11:36
标题:
泛型问题
class Info<T>{
private T var;
public T getVar() {
return var;
}
public void setVar(T var) {
this.var = var;
}
}
public class GenericsDemo13 {
public static void main(String[] args){
Info<String> i=new Info<String>();
i.setVar("AAAAA");
fun(i);
}
public static void fun(Info<?> temp){
System.out.println("内容:"+temp);
}
}
为什么这个结果打印出来是个地址,而不是AAA呢?
作者:
izwj
时间:
2012-4-1 11:47
你打印的是temp,这是对象,你的意思是打印var,
要取到var可以改成这样:
class Info<T>{
T var;
public T getVar() {
return var;
}
public void setVar(T var) {
this.var = var;
}
}
public class N1 {
public static void main(String[] args){
Info<String> i=new Info<String>();
i.setVar("AAAAA");
fun(i);
}
public static void fun(Info<?> temp){
System.out.println("内容:"+
temp.var
);
}
}
作者:
代臣
时间:
2012-4-1 12:19
本帖最后由 代臣 于 2012-4-1 12:23 编辑
//给你个修改后的程序:
class Info<T>{
private T var;
public T getVar() {
return var;
}
public void setVar(T var) {
this.var = var;
}
}
public class GenericsDemo13 {
public static void main(String[] args){
Info<String> i = new Info<String>();
i.setVar("AAAAA");
sop(i.getVar());//你在Info<T>类中定义了getVar()方法,干嘛不用呢,多写几行代码不累啊?呵呵。
}
//打印Object对象的方法
public static void sop(Object obj){
System.out.println("内容:"+obj);
}
}
复制代码
你希望打印AAAAA,但是在下面的方法中,通过fun()方法传入的是Info<?>类型的变量,而你希望打印的变量的值AAAAA在该类中只是成员变量,也就是打印的不是你所希望的String类型的AAAAA,而是一个类变量。
public static void fun(Info<?> temp){
System.out.println("内容:"+temp);
}
希望对你有用。
作者:
李震 李震 李震
时间:
2012-4-1 12:36
temp.getVar(),就能取到AAA了。
你set值,你取值要get啊,你放入的是对象,打印的就是对象地址。
作者:
孙利川
时间:
2012-4-1 18:04
你打印时传入的是一个对象,此时打印的是该对象的toString方法的返回值,toString方法是Object类的一个方法,它的默认值是:getClass().getName() + '@' + Integer.toHexString(hashCode())
,所以打印的是一个地址。你要打印AAA,除了上述方法外,可以复写toString方法,在其中将var强制类型转换成String后返回,不过这样你这个类只能传入String类型参数,传入其他的类型参数,会发生类型转换异常。
作者:
邓飞飞
时间:
2012-4-2 06:48
class Info<T>
{
private T var;
public T getVar()
{
return var;
}
public void setVar(T var)
{
this.var = var;
}
}
public class GenericsDemo13
{
public static void main(String[] args)
{
Info<String> i=new Info<String>();
i.setVar("AAAAA");
fun(i);
}
public static void fun(Info<?> temp)
{
System.out.println("内容:"+temp);
// 从程序来看出现你所说情况的原因是你打印的是变量temp的地址值,
//而你打印出AAAAA的值有两种方法:temp.Var;或用你自己构造函数的方法:i.getVar()
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2