我有一个名为BaseCode
的抽象类和两个具体类Location
和Department
:
public abstract class BaseCode {
private Integer id;
...
public Integer getId() { return id; }
public void setId(Integer id) { this.id = id; }
...
}
public class Location extends BaseCode {
...
}
public class Department extends BaseCode {
...
}
我有一个抽象类名为BaseCodeCache
和两个具体类名为LocationCache
和DepartmentCache
。 LocationCache
和DepartmentCache
将使用Singleton
。
public abstract class BaseCodeCache {
...
}
public class LocationCache extends BaseCodeCache {
...
}
public class DepartmentCache extends BaseCodeCache {
...
}
在`BaseCodeCache`中,我想要有一个`java.util.Map`类型的映射表,其值可以是任何类型的`BaseCode`即`Location`对象或`Department`对象。在`LocationCache`中,我想要`java.util.Map`来存储`Location`对象。 在`DepartmentCache`中,我想要`java.util.Map`来存储`Department`对象。为了实现这个目标,我在`BaseCodeCache`中添加了以下代码:
private Map<Integer, BaseCode> idMap = new HashMap<Integer, BaseCode>();
- 我希望有一种方法来在
java.util.Map
中存储一个值。
为了达到这个目的,我在BaseCodeCache
中添加了以下代码:
public void add(BaseCode baseCode) {
if (baseCode != null) {
idMap.put(baseCode.getId(), baseCode);
}
}
以下是我如何使用它来处理位置(Location)
的:
Location location = new Location(); ...
LocationCache.getInstance().add(location);
这是我在IT技术中使用
Department
的方法:Department department = new Department(); ...
DepartmentCache.getInstance().add(department);
- 我希望有一种方法可以将
java.util.Map
中的所有值作为java.util.List
返回。
在LocationCache
中,此方法应返回List<Location>
。
在DepartmentCache
中,此方法应返回List<Department>
。
这就是我卡住的地方。 我想在 BaseCodeCache
中创建此方法,但是当通过 LocationCache
调用此方法时,它返回 List<Location>
,而当通过 DepartmentCache
调用相同的方法时,则返回 List<Department>
。 这是否可能?
我将以下代码放入 BaseCodeCache
中:
public List<BaseCode> getList() {
return new ArrayList<BaseCode>(idMap.values());
}
但是上面的代码返回了
List<BaseCode>
。当我这样调用它时:List<Location> allLocations = LocationCache.getInstance().getList();
那么Java将无法编译并显示以下错误消息:
类型不匹配:无法从
List<BaseCode>
转换为List<Location>
我可以通过循环获取List<BaseCode>
,然后将其转换为List<Location>
来解决问题,但这似乎不太对。
这可行吗?