我正在寻找一种将一种泛型类型的数组转换为另一种类型的方法。这是我的用例:
我有一个带有以下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
}
}
答案 0 :(得分:4)
在这种情况下,我想编写一个方法,可以将
Job[]
转换为WorkItem[]
,以防止暴露基础库的类型。
Adapter Design Pattern可能会帮助您专门阅读对象适配器模式部分。
适配器模式是一种设计模式,用于允许两种不兼容的类型进行通信。如果一个类依赖于另一个类未实现的特定接口,则该适配器将充当两种类型之间的转换器。