0

这是我的示例代码。这会打印出“{test=theClass@7096985e}”,但我需要它来给我类型和范围的值。我已经尝试了几件事——任何方向都会很棒。谢谢!

import java.util.*;

class theClass {
    String type;
    String scope;

    public theClass(String string1, String string2) {
        type = string1; scope = string2;
    }

}

public class Sandbox {

    public static void main(String[] args){
        Hashtable<String, theClass> theTable = new Hashtable<String, theClass>();
        theClass object = new theClass("int", "global");
        theTable.put("test", object);

        System.out.println(theTable.toString());

    }
}
4

4 回答 4

5

只需覆盖toString类中的方法。

class theClass{
    String type;
    String scope;

    public theClass(String string1, String string2)
    {
        type = string1; scope = string2;
    }

    @Override
    public String toString(){
      return type+" "+scope;
    }

}
于 2013-07-08T08:01:26.583 回答
1

您需要覆盖类中类提供的toString()方法的默认实现。Object

@Override
public String toString() {
   return "type=" + type+", scope= "+scope;
}

System.out.println()usesString.valueOf()方法打印对象,该方法使用toString()on 对象。如果您没有覆盖toString()类中的方法,那么它将调用Object该类提供的默认实现,它说:

Object 类的 toString 方法返回一个字符串,该字符串由对象作为实例的类的名称、at 符号字符“@”和对象的哈希码的无符号十六进制表示形式组成。换句话说,此方法返回一个等于以下值的字符串:

getClass().getName() + '@' + Integer.toHexString(hashCode())

因此,您会得到这样的输出。

于 2013-07-08T08:04:08.220 回答
1

将方法 toString() 添加到您的 theClass{} 例如

@Override
public String toString() {
    return "theClass {type=" + type+", scope= "+scope+"};
}
于 2013-07-08T08:01:14.307 回答
0

您的代码工作正常。您确实从哈希表中获取了对象。您对对象的字符串表示感到困惑。

要显示内部数据,您必须覆盖public String toString()方法的默认实现。

于 2013-07-08T08:02:25.230 回答