由于历史原因,我必须支持的API包含方法
void item(Object id)
其中id
可以是数字标识或字符串别名。由于关于接受哪些类型及其语义的混淆,我想提供两种新方法
void item(CharSequence alias);
void item(int index);
但是由于我不能打破下游代码,我想提供一个不推荐使用的方法来重新训练旧的API
@Deprecated
void item(Object obj);
现在出现了一个新问题。以下代码将调用旧的,已弃用的方法:
Integer index = 3;
myClass.item(index); // ← will call item(Object)
我真的想调用新方法item
,以便不必重构(但只是重新编译)下游代码,以便不使用@Deprecated
方法。但我也不想提供两种方法item(int)
和item(Integer)
或只提供一种方法item(Integer)
,因为大多数下游代码都适用于int
。
将这样的API包含在内的首选方法是什么?我考虑过在默认jar中不提供item(Object)
方法,但是在方法中提供了额外的-legacy
jar。但这也会对下游产生影响。