【发布时间】:2014-07-18 20:23:42
【问题描述】:
我正在寻找一种将一种泛型类型的数组转换为另一种的方法。这是我的用例:
我有一个包含以下 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() {
// ...
}
}
我还有一个自定义库,它可以导入基础库,它为作业使用更特定于域的名称,即“客户”。我希望我的自定义库的用户只通过我的客户类型进行交互,这样我就可以在不干扰我的公共 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
}
}
【问题讨论】:
-
我们对
WorkItem一无所知。 -
我知道如何从
Job的属性中创建一个新的WorkItem。