【问题标题】:Unable to Override toString for Object无法覆盖对象的 toString
【发布时间】:2014-02-11 07:09:13
【问题描述】:

这是我用 Java 编写并访问 Bugzilla 并获取对象的代码。但我无法获得对象值。我正在尝试覆盖 toString() 函数,但被覆盖的函数不起作用。

package XMLRPC; 

import java.net.MalformedURLException; 
import java.net.URL; 
import java.util.HashMap; 
import java.util.Map; 

import org.apache.commons.httpclient.HttpClient; 
import org.apache.xmlrpc.XmlRpcException; 
import org.apache.xmlrpc.client.XmlRpcClient; 
import org.apache.xmlrpc.client.XmlRpcClientConfigImpl; 
import org.apache.xmlrpc.client.XmlRpcCommonsTransportFactory; 

public class Search { 

    @Override 
    public String toString() { 
               //System.err.println ("Ojesh"); 
               return String.format("oje"+"abx"); 
    } 

    public static void main(String args[]) 
          throws MalformedURLException, XmlRpcException { 


               HttpClient httpClient = new HttpClient(); 
            XmlRpcClient rpcClient = new XmlRpcClient(); 
            XmlRpcCommonsTransportFactory factory = new XmlRpcCommonsTransportFactory(rpcClient); 
            XmlRpcClientConfigImpl config = new XmlRpcClientConfigImpl(); 

          factory.setHttpClient(httpClient); 
            rpcClient.setTransportFactory(factory); 
            config.setServerURL(new URL("http://abc2/bugzilla/xmlrpc.cgi")); 
            rpcClient.setConfig(config); 

            //map of the login data 
            Map loginMap = new HashMap(); 
            loginMap.put("login", "abc@bag"); 
            loginMap.put("password", "***"); 
            loginMap.put("rememberlogin", "Bugzilla_remember"); 


            // login to bugzilla 
            Object loginResult = rpcClient.execute("User.login", new Object[]{loginMap}); 
            System.err.println ("loginResult=" + loginResult); 

            // map of the bug data ok 
            Map bugMap = new HashMap(); 

            bugMap.put("id", "350"); 

            //bugMap.put("status", "NEW"); 

            // create bug 
            Object createResult = rpcClient.execute("Bug.search", new Object[]{bugMap}); 
            //createResult.toString(); 

            System.err.println("createResult =" + createResult.toString());
         }
     } 

它没有按预期返回 OJEABX。而是显示 bugs=[Ljava.lang.Object;@2ee5e48a。 我哪里错了?我想打印 Object 的值但不能正常工作。

【问题讨论】:

  • createResult 是您的 Search 类的实例吗?
  • 您正在覆盖搜索类的 toString() 方法。
  • 如果您实际上在 Search 类的实例上调用 toString,它将输出您所期望的 - 不过我看不到您在代码中执行此操作的任何地方。你认为它应该在哪里做?
  • @rokonoid createResult 是一个由我正在调用的 API 方法返回的对象(Bug.seacrh)。

标签: java object tostring bugzilla


【解决方案1】:

您确实在 Search 类中创建了 toSrintg() 的覆盖版本。但你不使用它。

试试System.out.println(new Search().toString())); 看看你的toString() 是如何工作的。从您的角度来看,我不明白哪个代码行不起作用。

有两行打印一些东西:

System.err.println ("loginResult=" + loginResult);

System.err.println("createResult =" + createResult.toString());

第一行打印数组,因为loginResult 是数组。第二行打印您的 rpcClient 返回的对象,实际上也是数组。因此,您会看到无法更改的数组的 toString 实现。

如果要创建数组的字符串表示形式,请使用Arrays.toString(arr)

【讨论】:

  • System.out.println(new Search().toString()) 表现良好。但我想要的是获取其中有两个参数的 createResult 对象的内容。所以我试图使用 createResult.toString() 但不起作用。甚至 java.util.Arrays.toString(createResult)) 都不起作用。错误:- 数组类型中的 toString(long[]) 方法不适用于参数 (Object)
  • 如果我想访问不是我的类实例的对象的内容,我该怎么做??
  • @OD,你应该直接或间接使用这个类的服务。例如,如果您有实现getName() 的类Person,您可以调用此方法来打印名称。如果您正在处理数组(如您的情况),您可以遍历数组并打印每个元素或使用实用程序 liek Arrays.toString(arr)
  • 我已经尝试过 Arrays.toString(arr) 但它不起作用。它是类 java.util.HashMap 的对象。
【解决方案2】:

首先,您使用的是 String.format,顾名思义,它用于根据格式格式化字符串。见http://docs.oracle.com/javase/7/docs/api/java/lang/String.html

您需要的是使用 StringBuilder 通过附加它们来创建您想要的字符串并将其提供给 toString()

例如:http://docs.oracle.com/javase/tutorial/java/data/buffers.html

【讨论】:

  • en 如果我直接使用 return "ABC",则无法正常工作,我的意思是我的 toString() 方法没有在 System.err.println("createResult =" + createResult.toString( ));
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-13
  • 1970-01-01
  • 2012-10-13
  • 1970-01-01
  • 2019-08-02
相关资源
最近更新 更多