如何覆盖 class 定义不可访问的对象的 toString?
How to override toString of Object whose class defintion is not accessible?
如果问题的主题令人困惑,请原谅我[请编辑主题]。
我在 understanding/implementing 这个非常明显的用例中遇到困难。我敢肯定,肯定有一个我无法想到的简单解决方案。
我的代码:
Response response = driver.execute("findElement", "{using=xpath, value=//*[@id='myID']}");
System.out.println(response.toString());
现在 System.out.println
打印:
(Response: SessionID: ffcebc9226c9671e7f6725a3b1f5a96c, Status: 0, Value: [org.openqa.selenium.remote.RemoteWebElement@c6bdd2e4 -> unknown locator])
因为,由于已知原因,它没有正确打印完整的对象。因此,
我想@Override toString
方法 Response
class.
现在我的困难是,如果我 extends
Response
class 说 CommandResponse
然后使用以下 CommandResponse
的类型转换:
CommandResponse response = (CommandResponse) driver.execute("findElement", "{using=xpath, value=//*[@id='myID']}");
我收到错误:
java.lang.ClassCastException: org.openqa.selenium.remote.Response
cannot be cast to src.main.CommandResponse
所以,我的问题是,如何才能正确覆盖?
请指教
一个合适的解决方案是通过构造函数参数化将 Selenium Response
对象 注入 到包装器对象中。
然后,构造函数会简单地为您传递的对象分配一个自己的 Response
字段。
类似于:
CommandResponse response = new CommandResponse(driver.execute(...));
...
public CommandResponse(Response arg) {
this.response = arg;
}
这样,您将使用包装器对象 和 组合。
您的 CommandResponse
对象将覆盖 toString
方法并通过从 Response
对象中选择您需要的任何字段来构建 String
表示。
如果问题的主题令人困惑,请原谅我[请编辑主题]。
我在 understanding/implementing 这个非常明显的用例中遇到困难。我敢肯定,肯定有一个我无法想到的简单解决方案。
我的代码:
Response response = driver.execute("findElement", "{using=xpath, value=//*[@id='myID']}");
System.out.println(response.toString());
现在 System.out.println
打印:
(Response: SessionID: ffcebc9226c9671e7f6725a3b1f5a96c, Status: 0, Value: [org.openqa.selenium.remote.RemoteWebElement@c6bdd2e4 -> unknown locator])
因为,由于已知原因,它没有正确打印完整的对象。因此,
我想@Override toString
方法 Response
class.
现在我的困难是,如果我 extends
Response
class 说 CommandResponse
然后使用以下 CommandResponse
的类型转换:
CommandResponse response = (CommandResponse) driver.execute("findElement", "{using=xpath, value=//*[@id='myID']}");
我收到错误:
java.lang.ClassCastException: org.openqa.selenium.remote.Response cannot be cast to src.main.CommandResponse
所以,我的问题是,如何才能正确覆盖?
请指教
一个合适的解决方案是通过构造函数参数化将 Selenium Response
对象 注入 到包装器对象中。
然后,构造函数会简单地为您传递的对象分配一个自己的 Response
字段。
类似于:
CommandResponse response = new CommandResponse(driver.execute(...));
...
public CommandResponse(Response arg) {
this.response = arg;
}
这样,您将使用包装器对象 和 组合。
您的 CommandResponse
对象将覆盖 toString
方法并通过从 Response
对象中选择您需要的任何字段来构建 String
表示。