【问题标题】:How to solve name clash have the same erasure?如何解决名称冲突有相同的擦除?
【发布时间】:2018-09-18 15:11:13
【问题描述】:

我现在遇到了这个问题,我有一个具有两个方法的类具有相同的擦除:

public class VO implements Map<String,String> , Serializable{

    public synchronized String put (Object key, Object value){

       if (key == null)

           return null;

       if (value == null)
           return remove(key);
       String stringKey = key.toString();

       String stringValue = value.toString();

       if (value instanceof Boolean)
            stringValue = ((Boolean)value) ? "Y" : "N";

       return put(stringKey,stringValue);
}

@Override
public synchronized String put (String key, String value)
{
    if (key == null)
        return null;
    if (value == null)
        return remove(key);
    //
    int index = m_keys.indexOf(key);
    if (index != -1)
        return m_values.set(index, value);
    m_keys.add(key);
    m_values.add(value);
    return null;
   }    //  put
 }

这个应用程序经常使用这两种方法,我无法更改任何方法的名称,也无法删除put(Object key, Object value) 方法,有什么想法可以解决这个问题吗?

【问题讨论】:

  • put(Object key, Object value) 在那个类中没有意义?为什么你有它?为什么不能删除?
  • 我认为没有出路。因为第一种方法比第二种方法更通用。它包含除了原始数据类型之外的所有可能的多态调用。
  • 对此表示反对。这个问题太笼统了,提供的代码不正确。首先,您为什么要尝试自己实现Map 接口?其次,实际执行是错误的。假设这是您目前拥有的代码,这是Map 的不完整实现。你想达到什么目的?请更新您的原始问题。
  • @BheshGurung 我无法删除该 put 方法,因为该方法已用于该应用程序的近 70 个其他类和其他类,这些类现在位于我无权访问的 jar 依赖项中,VO 是其他人创建的核心类。
  • @Aris_Kortex 是的,这只是类的一个片段,但我认为没有必要把类完整,因为问题只是两个方法有擦除问题,我没有创建那个类其他人做到了,就是这样,VO 是一个核心类,如果我改变某些东西必须是最小的改变......

标签: java generics type-erasure


【解决方案1】:

首先,@Aris_Kortex 使用了很多 VO,来创建这个应用程序的 UImodel,VO 的构造函数是这样的:

public VO (Map<String,String> map)
   {
    this();
    Iterator<String> it = map.keySet().iterator();
    while (it.hasNext())
    {
        Object key = it.next().toString();
        Object value = map.get(key);
        put (key, value);
    }
}   //  VO

/** Base SerVersion */
private static final long serialVersionUID = 8683452581122892189L;

/** Keys            */
private ArrayList<String>   m_keys;
/** Values          */
private ArrayList<String>   m_values;
/** Embedded VOs    */
protected ArrayList<VO>     p_vos = null;

然后我害怕我无法衡量在这里改变某些东西的影响......我需要创建一个我重构的这个项目的包,因为之前是一团糟......但是 maven 把那个错误扔给我......

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-04
    • 2018-04-14
    相关资源
    最近更新 更多