我创建了一个公共的“Utils”类,我在其中放置了一些常用的 static 方法。 在Utils类中,我创建了一个私有的静态内部类,它是Utils提供的一些“工具”。 (那些工具是我需要的某种解析器)。 Utils中的一个方法,返回该解析器的一个新实例,一切正常。 “问题”是我在解析器中的每个公共方法都收到警告,而不是从包含的Utils类中调用。
这是它看起来的骨架:
public class Utils
{
public static Parser(String[] msgs) throws Exception
{
return Parser.create(msgs);
}
private static class Parser
{
/** fields... **/
private Parser()
{}
public static Parser create(String[] msgs) throws Exception
{
Parser parser = new Parser();
setupParser(msgs);
return parser;
}
private static void setupParser(String[] msgs) throws Exception
{ // do stuff
}
public boolean someInnerMethod(String key)
{
// do stuff
}
}
}
方法someInnerMethod
会发出警告:
Utils.Parser类型的方法someInnerMethod(String)从不在本地使用
我做错了吗?有没有更好的方法来做我在这里做的事情? 我一般希望Parser不能从外部访问,但是可以使用静态方法获取它(我不想在每次需要它的方法时实例化一个Utils类)
提前致谢。
答案 0 :(得分:3)
这不正确。你将无法使用你的类 - 你不能在静态工厂方法中使用返回值(现在它不会编译,但我想返回值应该是Parser
)。返回值的可见性使得使用您的工厂方法的任何人都无法访问它。
解决方法是分解内部类实现的公共接口,并将其用作工厂方法的返回值。
答案 1 :(得分:2)
虽然方法是公共的,但类本身是私有的,因此这些方法有效私有,因为它们只能从包含的类中访问。您的IDE似乎将它们视为与private
方法相同,如果您定义一个从未调用过的IDE,则会发出警告。
P.S。顺便说一句,没有“静态内部类”这样的东西 - 术语“内部类”指的是一个非静态嵌套类,其实例只能存在于容器的特定实例的上下文中,所以类不能同时是静态和内部。