Java API演变:如何弃用接受Object的方法

时间:2015-12-15 07:12:02

标签: java api overloading api-design

由于历史原因,我必须支持的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。但这也会对下游产生影响。

0 个答案:

没有答案