Java 如何在泛型类型中抽象定义泛型类型?

Java 如何在泛型类型中抽象定义泛型类型?,java,generics,abstraction,Java,Generics,Abstraction,假设我有如下定义的HashMap的HashMap: hashMap = new HashMap<String, HashMap<String, Integer>>(); hashMap=newhashmap(); 如何对此进行抽象以使定义更清晰?您可以创建一个抽象工厂类。通常,这些都有助于以通用方式为具体类型创建抽象包装。工厂通常也实现为单例。您可以创建一个抽象工厂类。通常,这些都有助于以通用方式为具体类型创建抽象包装。工厂通常也是作为单例实现的。如果您不想再次重复定

假设我有如下定义的HashMap的HashMap:

hashMap = new HashMap<String, HashMap<String, Integer>>();
hashMap=newhashmap();

如何对此进行抽象以使定义更清晰?

您可以创建一个抽象工厂类。通常,这些都有助于以通用方式为具体类型创建抽象包装。工厂通常也实现为单例。

您可以创建一个抽象工厂类。通常,这些都有助于以通用方式为具体类型创建抽象包装。工厂通常也是作为单例实现的。

如果您不想再次重复定义,可以将其设为类,定义并不含糊,只是冗长而已

class HashBrowns : HashMap<String, HashMap<String, Integer>>
类HashBrowns:HashMap

如果您不想再次重复定义,可以将其设置为类,定义并不含糊,只是冗长

class HashBrowns : HashMap<String, HashMap<String, Integer>>
类HashBrowns:HashMap

如果我正确地解释了您的问题,那么您有一个集合可以将对象映射到一起,并想知道是否有一种方法可以更好地阅读

最好为每个元素定义一个用途,例如:

Map<String,        // ZIP code   (e.g. 6009)
    Map<String,    // Name       (e.g. John Smith)
        Integer>>  // Age        (e.g. 42)
这将您的收藏简化为:

Map<String,         // ZIP/Postal code
    List<Person>>   // List of people in this postal code.
Map//此邮政编码中的人员列表。

如果您愿意,您可以进一步简化它,但这会让您知道应该采取哪些步骤。最重要的是使用有意义的名称。

如果我正确地解释了你的问题,你有一个集合可以将对象映射到一起,并想知道是否有一种方法可以更好地阅读

最好为每个元素定义一个用途,例如:

Map<String,        // ZIP code   (e.g. 6009)
    Map<String,    // Name       (e.g. John Smith)
        Integer>>  // Age        (e.g. 42)
这将您的收藏简化为:

Map<String,         // ZIP/Postal code
    List<Person>>   // List of people in this postal code.
Map//此邮政编码中的人员列表。

如果您愿意,您可以进一步简化它,但这会让您知道应该采取哪些步骤。最重要的是使用有意义的名称。

在不了解您的具体情况的情况下,可以推荐的最佳方法是一些提取存储方法的方法

例如:

public Integer getNumber(String name, String attribute)
{
    HashMap<String,Integer> subMap = hashMap.get(name);
    if (subMap != null)
    {
        return subMap.get(attribute);
    } else
    {
        return null;
    }
}

public void setNumber(String name, String attribute, Integer number)
{
    HashMap<String,Integer> subMap = hashMap.get(name);
    if (subMap == null)
    {
        subMap = new HashMap<String,Integer>();
        hashMap.put(name,subMap);
    }

    subMap.put(attribute,number);
}
public Integer getNumber(字符串名称、字符串属性)
{
HashMap subMap=HashMap.get(名称);
if(subMap!=null)
{
返回subMap.get(属性);
}否则
{
返回null;
}
}
public void setNumber(字符串名称、字符串属性、整数)
{
HashMap subMap=HashMap.get(名称);
if(subMap==null)
{
subMap=newhashmap();
hashMap.put(名称、子映射);
}
子映射put(属性、编号);
}

在不了解您的具体情况的情况下,最好推荐一些提取存储方法的方法

例如:

public Integer getNumber(String name, String attribute)
{
    HashMap<String,Integer> subMap = hashMap.get(name);
    if (subMap != null)
    {
        return subMap.get(attribute);
    } else
    {
        return null;
    }
}

public void setNumber(String name, String attribute, Integer number)
{
    HashMap<String,Integer> subMap = hashMap.get(name);
    if (subMap == null)
    {
        subMap = new HashMap<String,Integer>();
        hashMap.put(name,subMap);
    }

    subMap.put(attribute,number);
}
public Integer getNumber(字符串名称、字符串属性)
{
HashMap subMap=HashMap.get(名称);
if(subMap!=null)
{
返回subMap.get(属性);
}否则
{
返回null;
}
}
public void setNumber(字符串名称、字符串属性、整数)
{
HashMap subMap=HashMap.get(名称);
if(subMap==null)
{
subMap=newhashmap();
hashMap.put(名称、子映射);
}
子映射put(属性、编号);
}

你能解释一下什么是不清楚的吗?你能详细说明你想要完成什么吗?你想更清楚什么?你能解释一下什么是不清楚的吗?你能详细说明你想要完成什么吗?你想更清楚什么?好主意,但是,
Map
不是更好吗?@emory这当然很容易理解,但是引入了类型,其中只需要名称。使用描述性对象
Person
对实体之间的映射进行建模是我试图展示的要点。地图的地图(可以说)在概念上更难理解。好主意,但是
Map
不是更好吗?@emory这当然很容易理解,但引入了只需要名称的类型。使用描述性对象
Person
对实体之间的映射进行建模是我试图展示的要点。地图的地图(可以说)在概念上更难。