我有一个MapFactory,它是一个抽象类,用于实现子工厂类Map1Creator,Map2Creator,Map3Creator,...,MapNCreator之间的共享方法 这些nCreators返回一个Map1(它扩展了Map类),它已经用MapN类中的常量进行了初始化。 我的教授要求使用工厂模式而不是构造函数,所以我不得不在我的MapN类中删除它们。
Map类:
public abstract class Map {
protected Sector[][] grid;
protected List<Integer> dangerousSectCoord ;
protected List<Integer> normalSectCoord;
//[...]
protected List<Integer> emptySectCoord;
//all the getters...
}
在子类Map1中(字符串因为它们将从文件中读取):
public class Map1 extends Map{
private final static int ROWS_NUMBER=14;
private final static int COLS_NUMBER=23;
private final static String normSectorString= "all the sectors...";
private final static String dangerousSectorString [......]
private final static String escapeSectorString="B10,F01,P01,V11";
}
在MapFactory中,我不能只使用一种MapN来指定方法,所以我只能编写非特定的方法:
public abstract class MapFactory {
public abstract Map createMap();
//here there should be
//assignSectors(Map m);
//setDimensions(Map m);
//but MapN can't be converted to Map and in the MapNCreator Eclipse
//reminds me that I must implement the father's methods
public List<Integer> mapStrings(String string){
List<Integer> coor=new ArrayList<Integer>();
//parse sub-classes strings and convert them to coordinates;
}
}
所以在MapNCreator中:
public class Map1Creator extends MapFactory{
public Map1 createMap(){
Map1 m= new MapGalvani();
setDimensions(m)
assignSectors(m);
return null;
}
public void setDimensions(Map1 m ) {
m.grid= new Sector[m.getRowsNumber()][m.getColsNumber()];
m.alienSectCoord=new ArrayList<Integer>();
//[...]
m.emptySectCoord=new ArrayList<Integer>();
}
public void assignSectors(Map1 m){
//parse those constant strings and put them in the grid
//m.constantStringNormalSectors
}
但是你可以看到&#34; m&#34; map特别是Map1,方法需要Map1类中的常量。如果我在MapFactory中声明这些方法,它会在MapNCreators中给我一个错误,因为它们无法从Map转换为MapN(我认为多态会覆盖这个......)。 有没有办法在&#34;父亲&#34;中声明方法?工厂类,以便任何子创建者类都能够使用他们自己的类型?
答案 0 :(得分:0)
答案,一年后:在父类中创建一个通用的返回/参数类型:
<T extends Map> or <? extends Map>