[英]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.