0

我有这个课...

public abstract class LoadboardTable
{
    protected Map<String, HashMap<HasTableFields, String>>  table   = new TreeMap<String, HashMap<HasTableFields, String>>();

    public Set<Entry<String, HashMap<HasTableFields, String>>> getEntries()
    {
        return table.entrySet();
    }

    ...
}

在其他课程中,我不断重复泛型类型。例如...

for (Entry<String, HashMap<HasTableFields, String>> entry : myTable.getEntries()){}

Set<Entry<String, HashMap<HasTableFields, String>>> entries = otherTable.getEntries();

etc, etc...

这种泛型类型在整个应用程序中重复和散落。有没有更好的办法?如果我决定更改 LoadboardTable 类中的表 Map 对象的通用类型,我将在其他任何地方更改它几天。另外,继续输入它只是一个巨大的痛苦。

4

3 回答 3

3

没有办法避免重复,除了在构造函数中,因为 Java 7:

protected Map<String, HashMap<HasTableFields, String>> table = new TreeMap<>();

但是,如果您将 HashMap 和条目封装在定义良好的类中,您将拥有更好的代码,并且需要更少的输入。看起来您将对象用作开放数据结构,而不是将它们用作提供行为并保持其状态封装的封闭对象。

于 2013-01-24T14:46:11.310 回答
1

3 建议:

  1. 与其使用这么多泛型,不如想想你真正想要实现的类,而不是用泛型解决所有问题。
  2. 在 Java 7 中使用菱形运算符。
  3. 使用 Eclipse 时,您可以只写“getEntries”,然后按 CTRL+1 并单击“分配给局部变量”——这将自动创建一个具有正确类型的局部变量。这并不能解决问题,但会使编写速度更快一些。
于 2013-01-24T14:48:06.040 回答
0

public abstract class LoadboardTable<T,O>
{
    protected Map<T, HashMap<O, T>>  table   = new TreeMap<T, HashMap<O, T>>();

    public Set<Entry<T, HashMap<O, T>>> getEntries()
    {
        return table.entrySet();
    }
}

于 2013-01-24T14:56:04.753 回答