将类中的方法标记为"should not be invoked because the system already does this automatically" ?



我使用Java 1.7。我在.jar中有一个类"ItemFactory",它允许其他开发人员创建Item对象(Item有一个私有构造函数)。工厂需要一些用户输入来创建某些项目。最近我增加了一些也需要输入的项目,但是所有必要的数据都已经存在于系统中。我认为让我的"ItemHandler"类自动创建这些项目对开发人员来说会更容易。所以让他们输入这个:

ItemFactory factory = new ItemFactory();
Item item = factory.createItem(parameter1, parameter2);
ItemHandler handler = new ItemHandler();
handler.doSomethingCool(item);

他们可以简单地这样做:

handler.doSomethingCool()

doSomethingCool()方法将使产品自动从工厂出厂,因为所有必要的输入已经存在于系统中。

我的问题是现在工厂类突然有了不应该可见的公共方法。例如,公共方法createItemForSomethingCoolPurposes()由系统本身自动调用,开发人员需要担心它。看到这个方法可能会让他们感到困惑,因为它不清楚它的目的是什么。添加注释/文档来表达"这个方法不应该被调用"似乎很愚蠢。我错了吗?这是一个普遍的问题吗?有关于它的惯例吗?

只需使用不再是public的旧代码重构这些方法。如果你不能这样做,因为你不能控制代码使用你的api标记这些方法@Deprecated,并添加一个注释,在下一个版本中它将被删除。所以你只需要传达你删除public方法的意图,在每个人重构他们的代码后,你可以删除代码。

这也是java sdk开发人员正在做的事情。他们将过时的代码标记为@Deprecated,为新代码添加链接和示例,并在下一个版本中删除过时的代码。

您可以将该方法重构为包私有。https://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html

有关该主题的更多信息,请阅读Effective Java (3rd edition):

项目15:最小化类和成员的可访问性


或者使用谷歌容易出错的库,你可以用@DoNotCall注释它,也可以添加一个@Deprecated注释,这样IDE用户就可以立即得到他们不应该调用该方法的反馈。

相关内容

最新更新