【发布时间】:2015-05-26 16:49:08
【问题描述】:
如果我无法修改Factory.create 方法(只能修改Task 和SubType 类),如何使Factory.create 调用Task.<init>(SubType) 构造函数?
public class Test {
public static void main(String[] args) {
Factory.create(new SubType());
// OUTPUT:
// task instanceof SubType: true
// callable (PROBLEM: I want SubType constructor to be invoked)
}
public static class SubType implements Callable {
@Override
public Object call() throws Exception {
return null;
}
}
public static class Task {
private Callable callable;
private SubType subType;
public Task(SubType subType) {
System.out.println("Subtype");
this.subType = subType;
}
public Task(Callable callable) {
System.out.println("callable");
this.callable = callable;
}
}
public static class Factory {
// If change method argument type to SubType it will invoke
// Task.<init>(SubType) constructor, but I can't modify it
public static Task create(Callable task) {
System.out.println("task instanceof SubType: " + (task instanceof SubType));
return new Task(task);
}
}
}
【问题讨论】:
标签: java constructor-overloading