使用多态性。
创建接口SearchableTable
:
public interface SearchableTable<T> {
T getItem(int x, int y);
}
如果这些表在你的控制之下,让它们实现这个接口。否则,用您自己的包装类包装表格,如下所示:
public class SearchableTableWrapper implements SearchableTable<MyItemType> {
private final Table wrappedThirdPartyTable;
public SearchableTableWrapper(Table wrappedThirdPartyTable) {
this.wrappedThirdPartyTable = wrappedThirdPartyTable;
}
public MyItemType getItem(int x, int y) {
...
}
}
现在,在您想要实现接受表 id 和项目索引的通用方法的通用类中,接受表本身并调用其getItem
方法,如下所示:
public class TableUtils {
public static <T> T getItem(SearchableTable<T> table, int x, int y) {
return table.getItem(x, y);
}
}
如果您必须获取 table id 而不是 table,只需将Map
from table id 保留到相关的SearchableTable
,如下所示:
public class TableUtils {
private static Map<Long, SearchableTable> tableIdToSearchableTable;
public static <T> T getItem(SearchableTable<T> table, int x, int y) {
return table.getItem(x, y);
}
}
该映射可以通过多种方式加载实际SearchableTable
的 s,或者通过static
初始化块或静态addTable
方法,或者您可以完全变成TableUtils
非静态的,无论哪种方式最适合您。
这里主要是使用多态性。
编辑
你不需要一个enum
. 您Table1
的评论应如下所示:
public class Table1 implements SearchableTable<String> {
public String getItem(int x, int y) {
// use x and y to fetch the item friom the 2-dimensional data structure
}
}