gpt4 book ai didi

java - 不同类实例的链接方法和对象共享

转载 作者:行者123 更新时间:2023-12-02 12:36:08 26 4
gpt4 key购买 nike

对于下面的示例代码...

  1. 有没有办法链接不同类的实例?提供的示例是连接属于不同类实例的方法的失败尝试。

  2. 此外,在同一示例中,Client2Client3 共享错误对象。 在子类和非关联类之间共享对象的更有效方法是什么?

为了清楚起见,我还内嵌了评论。

感谢您的时间和帮助。

示例代码

public class StubRunner
{
public run(){
ClientFactory client = new ClientFactory();

//not correct. But, this is how i want to finally chain methods
//belonging to different class instances. Please advise.
client.getClient1().testClient1().getClient2().testClient2().assert(...);
}
}
public class ClientFactory
{
public Client1 getClient1(){return new Client1();}
public Client2 getClient2(){return new Client2();}
}
public class BaseClient
{
public Errors errors = null;
}
public class Client1 extends BaseClient
{
public void testClient1(){...}
}
public class Client2 extends BaseClient
{
public void testClient2()
{
//here i am directly passing the error object
//what is a better way?
//is there a more efficient way to make the SAME error object
//available to Client3
new Client3(this.errors).testClient3();
...
}
}
public class Client3 extends BaseClient
{
public Client3(Errors errors){this.errors = errors;}
public void testClient3(){...}
}

最佳答案

当我想要编写短的方法调用链但我希望方法相对于任何类型的状态进行更改时,我通常会使用 lambda 表达式。至于您的场景,您的每个测试都将是一个 lambda 表达式,这意味着我会将 testClient4 方法传递给 testClient3 方法,将 testClient3 方法传递给 testClient2 方法,等等。但是,代码变得越来越丑陋,因为你的方法调用链变得很长。

=> 您可以使用 Fluent 接口(interface):您可以让每个方法执行一些逻辑,然后返回一个实例,您可以在该实例上调用要执行的下一个内联方法。

  • ClientFactory.getClient1():客户端1
  • Client1.testClient1() :Client1(即返回此)
  • Client1.getClient2():客户端2
  • Client2.testClient2() Client2(即返回此)
  • ...

显然,每个实例都需要引用下一个内联实例,并知道它将调用哪个实例(Client1 将引用 Client2,Client2 引用 Client3,等等)。

这可行,但我不喜欢这种情况!我想说这更像是一个技巧而不是干净的编码。您应该分别对每个客户端使用流畅的接口(interface),除非您的方法之一实际上返回另一个实例:

client1.testClient1().testClient2().testClient3() with each test method returning an instance of the next client if there is a good reason for it

但是在测试方法之间插入 getClient 方法是没有意义的...

关于java - 不同类实例的链接方法和对象共享,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45131285/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com