Java - 将类作为参数传递

时间:2011-07-18 16:43:03

标签: java

我有一个方法需要创建某种类型的对象数组。这是其中的一部分:

public void myMethod() {
    for (int i = 0; i < something.length; i++) {
        ViewerSorter sorter = new IdeaTableSorter(i);
        .....
        .....
    }
}

我希望这种方法适用于所有类型的ViewerSorter对象,而不仅仅是与IdeaTableSorter结合使用,但由于我必须创建一堆这些对象,所以我想传递对{的引用{1}}告诉它要实例化哪个类。

有没有办法在不使用Reflection API的情况下执行此操作?

4 个答案:

答案 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传递给可以创建相应类型的方法。