Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将类中的方法标记为;不应调用,因为系统已自动执行此操作;?_Java_Public - Fatal编程技术网

Java 将类中的方法标记为;不应调用,因为系统已自动执行此操作;?

Java 将类中的方法标记为;不应调用,因为系统已自动执行此操作;?,java,public,Java,Public,我正在使用Java1.7。我在.jar中有一个类“ItemFactory”,它允许其他开发人员创建项对象(项有一个私有构造函数)。工厂需要一些用户输入来创建某些项目。最近,我添加了一些也需要输入的项目,但所有必要的数据都已存在于系统中。我认为让我的“ItemHandler”类自动创建这些项目对开发人员来说会更方便。因此,让他们输入以下内容: ItemFactory factory = new ItemFactory(); Item item = factory.createItem(parame

我正在使用Java1.7。我在.jar中有一个类
“ItemFactory”
,它允许其他开发人员创建项对象(项有一个私有构造函数)。工厂需要一些用户输入来创建某些项目。最近,我添加了一些也需要输入的项目,但所有必要的数据都已存在于系统中。我认为让我的
“ItemHandler”
类自动创建这些项目对开发人员来说会更方便。因此,让他们输入以下内容:

ItemFactory factory = new ItemFactory();
Item item = factory.createItem(parameter1, parameter2);
ItemHandler handler = new ItemHandler();
handler.doSomethingCool(item);
他们可以这样做:

handler.doSomethingCool()
doSomethingCool()
方法将自动从工厂生成项目,因为系统中已经存在所有必要的输入


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

只需使用不再是
public
的旧代码重构这些方法即可。如果由于无法使用api控制代码而无法执行此操作,请标记这些方法
@Deprecated
,并添加注释,说明在下一版本中将删除该方法。因此,您只需传达删除
public
方法的意图,在每个人都重构了他们的代码之后,您就可以删除代码了


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

您可能会将该方法重构为包私有。

有关该主题的更多信息,请阅读有效Java(第三版):

项目15:尽量减少类和成员的可访问性



或者,使用Google的易出错库,您可以使用@DoNotCall对其进行注释,还可以添加@Deprecated注释,以便IDE用户立即得到反馈,认为他们不应该调用该方法。

重构什么?该项必须在itemFactory类中创建,因为该项具有私有构造函数,但需要该项的方法位于另一个包中。因此,我不知道如何将getItem方法重构为其他方法。我假设您的用户已经使用了
public
方法。因此,为了将它们更改为
private
,例如,您需要使用这些方法重构所有代码。我不能将它们设置为private,它们需要是公共的,这样我自己的类仍然可以访问它们。不需要调用它们的是外部CLSS(不是我的jar的一部分)。类似于受保护,但跨越多个包;(