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建议:
公共抽象类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将极大地帮助重复。如果可以的话,我会投票的。