如果有语法问题,请原谅我。这样做的目的不是为了获得完美的代码而是为了获得设计。
我有interface ITable<T>
public interface ITable<T> {
public Collection<T> getEntries();
public void add(CustomObj value);
public Collection<CustomObj> getCustomObjects();
}
由两个类使用:
TableOne<CustomObj>
和TableTwo<Pair<CustomObj, CustomObj>>
然后我有一个使用函数
应用这些表的接口public interface ITableFunction<T> {
public abstract Collection<ITable<?>> execute(Collection<ITable<T>> tables);
}
当我尝试创建一个通用的抽象类
时,我的困境就出现了public abstract class AbstractTableFunctionCombined<T> implements ITableFunction<T>{
private boolean someBool;
public AbstractTableFunctionCombined(boolean someBool){
this.someBool = someBool;
}
@Override
public Collection<ITable<?>> execute(Collection<ITable<T>> tables){
// What i would like to do, but can't right now:
ITable<T> combinedTable;
if (someBool){
combinedTable = new TableOne();
} else {
combinedTable = new TableTwo();
}
for(ITable<T> table : tables){
combinedTable.addAll(table.getCustomObjects());
}
for(T entry : table.getEntries()){
execute(entry);
}
}
public abstract void execute(T entry);
}
问题在于我无法保证类型T
与我尝试实例化的表格相同。我以为我必须从Pair<CustomObj, CustomObj>
和常规CustomObj
创建某种关系。我尝试创建一个Entry
接口,这两个接口都会使用,ITable<T>
为ITable<T extends Entry>
,但这又遇到了同样的问题。
我还想过,也许我可以让TableOne
和TableTwo
类使用相同的Generic TableTwo<T> implements ITable<T>
,但TableTwo使用Pair<CustomObj, CustomObj>
有严格的限制。< / p>
我是否必须创建两个单独的类:AbstractTableFunctionOne<CustomObj>
和AbstractTableFunctionTwo<Pair<CustomObj, CustomObj>>
?我想避免这种情况,因为它会有很多重复的代码。
或者我是否强迫这种面向对象的设计? TableOne和TableTwo甚至不应该实现相同的接口吗?
答案 0 :(得分:0)
此界面有一些问题:
public interface ITableFunction {
public abstract execute(Collection<ITable<T>> tables);
}
您需要返回类型和Generic:
public interface ITableFunction<T> {
public abstract void execute(Collection<ITable<T>> tables);
}
并返回Method
的类型public Collection<ITable<T>> execute(Collection<ITable<T>> tables){
..
应该是声明和实现中的集合或无效。