【发布时间】: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