我有
public class Entity
在哪个工作类别上:
public class Table<Target extends Entity>
{
public boolean save (Target target)
public Target load (int id)
}
直到我将 Table 类的这个对象放入数据库类 Map 中,一切都正常,但是:
public class Database
{
public String name;
public Map<String, Table<? extends Entity>> tables = new HashMap <String, Table<? extends Entity>> ();
public Context context;
public int version;
public Database (Context context, int version)
{
this.context = context;
this.version = version;
}
public void add (Table<? extends Entity> table)
{
tables.put(table.name, table);
}
public Table <? extends Entity> table (String name)
{
return (Table<? extends Entity>) tables.get(name);
}
}
假设我们有:
public class Apple extends Entity
我希望这段代码能够工作:
//init
database = new Database(getBaseContext(), 4);
new Table<Apple> (database, Apple.class);
//this is where solution need occurs !
database.table("apples").save (new Apple("green apple"));
类型中的方法 save(capture#1-of ? extends Entity) 表(capture#1-of ? 扩展实体) 不适用于参数(注意)
如何使map.get方法起作用?
最佳答案
为了使这更方便,您可以做的一件事是按目标类映射表:
Map<Class<? extends Entity>, Table<? extends Entity>> tables;
public void <T extends Entity> addTable(Class<T> cls, Table<T> table) {
tables.put(cls, table);
// alternately make it possible to get the target class from the table
}
@SuppressWarnings("unchecked")
public <T extends Entity> Table<T> getTable(Class<T> cls) {
return (Table<T>) tables.get(cls);
}
正如注释所暗示的那样,这根本不是类型安全的 - 您需要确保表
中的键和值永远不会不匹配。
关于java - 从映射 <String, Table<? 获取具有未知泛型参数的对象扩展实体>>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13331426/