将通用对象数组转换为另一个通用类的数组

时间:2014-07-18 20:23:43

标签: java arrays generics

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

我有一个带有以下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() {
    // ...
  }
}

我还有一个自定义库,用于导入基础库,该库使用更多特定于域的名称作为“客户”。我希望我的自定义库的用户只能通过我的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
  }
}

1 个答案:

答案 0 :(得分:4)

  

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

在这种情况下,

Adapter Design Pattern可能会帮助您专门阅读对象适配器模式部分。

了解更多Adapter Pattern - GOF

  

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

enter image description here