A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© yangshang1 中级黑马   /  2012-4-1 11:36  /  1819 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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呢?

5 个回复

倒序浏览
你打印的是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:23 编辑

  1. //给你个修改后的程序:
  2. class Info<T>{
  3.         private T var;

  4.         public T getVar() {
  5.                 return var;
  6.         }

  7.         public void setVar(T var) {
  8.                 this.var = var;
  9.         }
  10. }
  11. public class GenericsDemo13 {
  12.         public static void main(String[] args){
  13.                 Info<String> i = new Info<String>();

  14.                 i.setVar("AAAAA");
  15.                 sop(i.getVar());//你在Info<T>类中定义了getVar()方法,干嘛不用呢,多写几行代码不累啊?呵呵。
  16.         }
  17.                 //打印Object对象的方法
  18.         public static void sop(Object obj){
  19.                 System.out.println("内容:"+obj);
  20.         }
  21. }
复制代码
你希望打印AAAAA,但是在下面的方法中,通过fun()方法传入的是Info<?>类型的变量,而你希望打印的变量的值AAAAA在该类中只是成员变量,也就是打印的不是你所希望的String类型的AAAAA,而是一个类变量。
public static void fun(Info<?> temp){
System.out.println("内容:"+temp);
}
希望对你有用。
回复 使用道具 举报
  temp.getVar(),就能取到AAA了。
你set值,你取值要get啊,你放入的是对象,打印的就是对象地址。
回复 使用道具 举报
你打印时传入的是一个对象,此时打印的是该对象的toString方法的返回值,toString方法是Object类的一个方法,它的默认值是:getClass().getName() + '@' + Integer.toHexString(hashCode())
,所以打印的是一个地址。你要打印AAA,除了上述方法外,可以复写toString方法,在其中将var强制类型转换成String后返回,不过这样你这个类只能传入String类型参数,传入其他的类型参数,会发生类型转换异常。
回复 使用道具 举报
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()
}
      
}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马