我正在寻找一种将一种通用类型的数组转换为另一种通用类型的方法。这是我的用例:

我有一个包含以下Composite的基本库:

// leaf
public interface Job<T extends JobResult> {
  public T doJob();
}

public class CompositeJob<T extends JobResult> implements Job<T>{
  private Job<T>[] jobs;
  // ...
}

// component
public interface Worker<T extends JobResult> {
  public T doWork();
  public Job<T>[] getJobs();
  public void addJob(Job<T> job);
}

public class HardWorker<T extends JobResult> implements Worker<T> {
  public T doWork() {
    // ...
  }
}


我还有一个导入基础库的自定义库,该库对Job使用了更多特定于域的名称,即“ Customer”。我希望自定义库的用户只能通过我的客户类型进行交互,因此我可以更改基本库的实现,而不会干扰我的公共API。

我受阻,因为Worker.getJobs()返回一个Job[]数组。我想写一个可以将Job[]转换为WorkItem[]的方法,以防止暴露基本库的类型,但是我不确定如何用Java编写该对话方法。

这是我想要的方法的签名:

public WorkItem<T1>[] convert(Job<T>[] jobs) {
  for (Job<T> job : jobs) {
    // convert a T to a T1
    // create a new WorkItem using the Job as input
  }
}

最佳答案

我想写一个可以将Job[]转换为WorkItem[]的方法,以防止暴露基本库的类型。


在这种情况下,Adapter Design Pattern可能会帮助您特别阅读对象适配器模式部分。

阅读更多Adapter Pattern - GOF


  适配器模式是一种设计模式,用于允许两种不兼容的类型进行通信。如果一个类依赖于另一个类未实现的特定接口,则适配器充当两种类型之间的转换器。

09-10 01:22
查看更多