Java 泛型重复

Java 泛型重复,java,generics,Java,Generics,我有这门课 public abstract class LoadboardTable { protected Map<String, HashMap<HasTableFields, String>> table = new TreeMap<String, HashMap<HasTableFields, String>>(); public Set<Entry<String, HashMap<HasTable

我有这门课

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();
    }

    ...
}
公共抽象类LoadboardTable
{
受保护的映射表=新树映射();
公共集合getEntries()
{
return table.entrySet();
}
...
}
在其他类中,我经常重复泛型类型。例如

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

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

etc, etc...
for(条目:myTable.getEntries()){
Set entries=otherTable.getEntries();
等等,等等。。。

这种泛型类型在整个应用程序中重复出现。有更好的办法吗?如果我决定在LoadboardTable类中更改table Map对象的泛型类型,我也会在其他地方更改它好几天。另外,继续键入它是一件非常痛苦的事情。

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

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

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

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

protected Map<String, HashMap<HasTableFields, String>> table = new TreeMap<>();
protectedmap table=newtreemap();
但是,如果您将HashMap和条目封装在定义良好的类中,那么您的代码会更好,输入的代码也会更少。看起来您正在将对象用作开放数据结构,而不是将其用作提供行为并保持其状态封装的封闭对象。

3建议:

  • 不要使用太多泛型,而是考虑您实际想要实现的类,而不是使用泛型解决所有问题
  • 在Java7中使用菱形操作符
  • 使用eclipse时,您可以只编写“getEntries”,然后按CTRL+1并单击“assign to local variable”-这将自动创建具有正确类型的局部变量。这并不能解决问题,但会使编写速度加快一点
  • 3.建议:

  • 不要使用太多泛型,而是考虑您实际想要实现的类,而不是使用泛型解决所有问题
  • 在Java7中使用菱形操作符
  • 使用eclipse时,您可以只编写“getEntries”,然后按CTRL+1并单击“assign to local variable”-这将自动创建具有正确类型的局部变量。这并不能解决问题,但会使编写速度加快一点
  • 公共抽象类LoadboardTable
    {
    受保护的映射表=新树映射();
    公共集合getEntries()
    {
    return table.entrySet();
    }
    }
    

    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();
        }
    }
    
    公共抽象类LoadboardTable
    {
    受保护的映射表=新树映射();
    公共集合getEntries()
    {
    return table.entrySet();
    }
    }
    

    <代码> < /p>考虑在<代码> LoadboardTable < /C>类中封装查找行为,例如通过添加一个方法<代码> GETABLE(String)< /C> >返回<代码> HashMap < /代码>。考虑将查找行为封装在<代码> LoadboardTable < /Cord>类中,例如通过添加一个方法<代码> GETABLE(String)

    返回
    HashMap
    。谢谢。“没有办法避免重复”回答了这个问题。另一方面,HasTableFields是一个枚举表实现的字段结构(名称、描述、宽度)的接口。我有许多不同的桌子,它们的操作方式大不相同。如果我封装了所有必要的功能,我将牺牲内聚性来封装。这只是一个实用程序类,它允许我比较不同系统的“表”,并使用Set函数来获得表之间的补码,等等。“没有办法避免重复”回答了这个问题。另一方面,HasTableFields是一个枚举表实现的字段结构(名称、描述、宽度)的接口。我有许多不同的桌子,它们的操作方式大不相同。如果我封装了所有必要的功能,我将牺牲内聚性来封装。这只是一个实用程序类,它允许我比较不同系统的“表”,并使用Set函数来获得表之间的补码,等等#3将极大地帮助重复。如果可以,我会投票的。谢谢#3将极大地帮助重复。如果可以的话,我会投票的。