如何覆盖 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 表示。