我有一个方法需要创建某种类型的对象数组。这是其中的一部分:
public void myMethod() {
for (int i = 0; i < something.length; i++) {
ViewerSorter sorter = new IdeaTableSorter(i);
.....
.....
}
}
我希望这种方法适用于所有类型的ViewerSorter
对象,而不仅仅是与IdeaTableSorter
结合使用,但由于我必须创建一堆这些对象,所以我想传递对{的引用{1}}告诉它要实例化哪个类。
有没有办法在不使用Reflection API的情况下执行此操作?
答案 0 :(得分:4)
您可以传递实例化您的类的Factory
对象。这将是Abstract factory pattern。例如:
interface ViewSorterFactory {
ViewSorter create();
}
class IdeaTableSorterFactory implements ViewSorterFactory {
ViewSorter create() { return new IdeaTableSorter(); }
}
class FooTableSorterFactory implements ViewSorterFactory {
ViewSorter create() { return new FooSorter(); }
}
然后:
myMethod(new IdeaTableSorterFactory());
其中:
for (int i = 0; i < something.length; i++) {
ViewerSorter sorter = factory.create();
Class.newInstance()
并不完全是反射API,但我认为你认为这个选项不合需要。但试一试 - 这种方法是一样的 - 你通过工厂(在这种情况下是Class
)并调用创建方法(.newInstance()
)
答案 1 :(得分:2)
是的,你可以使用反射来做到这一点。但是,使用工厂模式可能会更清晰:
public interface IViewerSorterFactory {
ViewerSorter create(int i);
}
public void myMethod(IViewerSorterFactory factory) {
for (int i = 0; i < something.length; i++) {
ViewerSorter sorter = factory.create(i);
.....
.....
}
}
答案 2 :(得分:1)
您可以使用创建查看器排序器的方法传递对象 - 这是一种排序提供程序。
public void myMethod(ViewerSorterProvider creator) {
for (int i = 0; i < something.length; i++) {
ViewerSorter sorter = creator.create(i);
.....
.....
}
}
public interface ViewerSorterProvider {
ViewerSorter create(int i);
}
答案 3 :(得分:1)
您可以将factory object传递给可以创建相应类型的方法。