java - 从映射 <String, Table<? 获取具有未知泛型参数的对象扩展实体>>

标签 java generics

我有

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/

相关文章:

java - 是否可以传递类类型并用作返回类型?

Java Hashmap,其中键是文件,值是模型

java - builder 模式中的逻辑

java - Logstash-logback 事件特定的自定义字段(使用 StructuredArguments)未添加到 JSON

swift - 将具有多个泛型类型的枚举作为参数传递

generics - 如何使用 Codable 解析通用响应

Java泛型方法来过滤和查找列表中的第一个元素

.net - 为什么没有 HybridDictionary 的通用版本?

java - Sonar : Null pointers should not be dereferenced

java - Zxing NotFoundException