簡體   English   中英

Java - 將 class 作為參數傳遞

[英]Java - Passing a class as a parameter

我有一個方法需要創建特定類型的對象數組。 這是其中的一部分:

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

我希望這種方法可以處理各種ViewerSorter對象,而不僅僅是與IdeaTableSorter ,但由於我必須創建一堆這些對象,我想傳遞一個對myMethod的引用,告訴它要實例化哪個 class。

有沒有辦法在不使用反射 API 的情況下做到這一點?

您可以傳遞一個Factory object 來實例化您的 class。 這將是抽象工廠模式 例如:

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()

是的,您可以使用反射來做到這一點。 但是,可以說使用工廠模式會更干凈:

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);
        .....
        .....
    }
}

您可以使用創建查看器排序器(排序提供程序)的方法傳入 object。

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);
}

您可以將工廠 object傳遞到可以創建適當類型的方法中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM