gpt4 book ai didi

java - 在Java中包装一个类而不重复所有方法

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

我想编写一个 Java 类,为 Multi-Tenancy 系统以特定方式包装另一个类:

  • 原类的所有方法都应该存在于新类中
  • 除了新方法的参数应该相同减 1:租户(=当前用户)
  • 我想为新类编写尽可能少的代码。在最好的情况下,它应该为空,并且所有方法在运行时“自动生成”或“自动检测”。
<小时/>

示例:

采用这个现有的类(class):

MyService{
public List<Product> getProducts(Account filterWithUseraccount);
public List<Purchase> getPurchases(Account filterWithUseraccount, Date fromDate, Date tillDate);
public List<Category> getCategories(Account filterWithUseraccount, Category parentCategory);
}

我想创建这个新类,但方法应该是“自动生成的”:

MyTenantOrientedService{

// Assign an account which will be used to call all MyService methods
private Account filterWithUseraccount;

// The service being wrapped
private MyService myService;

public List<Product> getProducts(){
return myService.getProducts(filterWithUseraccount);
}
public List<Purchase> getPurchases(Date fromDate, Date tillDate){
return myService.getPurchases(filterWithUseraccount, fromDate, tillDate);
}
public List<Category> getCategories(Category parentCategory){
return myService.getCategories(filterWithUseraccount, parentCategory);
}
}
<小时/>

如您所见,MyTenantOrientedService 中的方法与 MyService 中的方法相同,只是参数“Account filterWithUseraccount”从未使用,可以从私有(private)属性中获取。

这是一个简单的示例,但想象一下一个具有很多方法的类,这使得创建包装函数变得非常繁琐。这是大量的代码重复,并且很容易产生错误。

我相信可能存在使用 AOP 或其他设计模式的解决方案,但我不知道是哪个。

最佳答案

您的 IDE 会为您处理此类任务。

例如,您可以在 MyTenantOrientedService 内添加类型为 MyService 的成员变量,并在 Eclipse 上右键单击 MyTenantOrientedService,然后单击“Source -> Generation”委托(delegate)方法”

它正在应用 Delegation Pattern为你。

关于java - 在Java中包装一个类而不重复所有方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24906791/

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