Java 以下是「;“私有静态内部类”;实现正确吗?

Java 以下是「;“私有静态内部类”;实现正确吗?,java,static-methods,inner-classes,static-class,private-class,Java,Static Methods,Inner Classes,Static Class,Private Class,我创建了一个公共的“Utils”类,在这个类中我放置了一些常用的静态方法。 在这个Utils类中,我创建了一个私有的静态内部类,它是Utils提供的一些“工具”。(该工具是满足我需要的某种解析器)。 Utils中的一个方法返回该解析器的一个新实例,一切正常。 “问题”是,对于解析器中未从包含的Utils类调用的每个public方法,我都会收到警告 这是它的外观框架: public class Utils { public static Parser(String[] msgs) thr

我创建了一个公共的“Utils”类,在这个类中我放置了一些常用的静态方法。 在这个Utils类中,我创建了一个私有的静态内部类,它是Utils提供的一些“工具”。(该工具是满足我需要的某种解析器)。 Utils中的一个方法返回该解析器的一个新实例,一切正常。 “问题”是,对于解析器中未从包含的Utils类调用的每个public方法,我都会收到警告

这是它的外观框架:

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)从未在本地使用

我做错什么了吗?有没有更好的方法来完成我在这里所做的事情? 我通常不希望从外部访问解析器,但是使用静态方法也可以获得它(我不希望每次需要Utils类的方法时都实例化它)


提前感谢。

虽然方法是公共的,但类本身是私有的,因此这些方法实际上是私有的,因为它们只能从包含的类中访问。您的IDE似乎将它们视为与
private
方法相同的方法,如果您定义了一个从未调用过的方法,则会向您发出警告


顺便说一句,没有“静态内部类”这个词,“内部类”指的是非静态嵌套类,其实例只能存在于容器的特定实例的上下文中,因此类不能同时是静态的和内部的。

虽然方法是公共的,但类本身是私有的,因此,这些方法实际上是私有的,因为它们只能从包含类中访问。您的IDE似乎将它们视为与
private
方法相同的方法,如果您定义了一个从未调用过的方法,则会向您发出警告


顺便说一句,没有“静态内部类”这个词,“内部类”指的是非静态嵌套类,其实例只能存在于容器的特定实例的上下文中,因此类不能同时是静态的和内部的。

这是不正确的。您将无法使用您的类-您不能在静态工厂方法中使用返回值(现在它不会编译,但我猜返回值应该是
解析器
)。返回值的可见性使使用factory方法的任何人都无法访问它


一种解决方法是找出内部类实现的公共接口,并将其用作factory方法的返回值。

这是不正确的。您将无法使用您的类-您不能在静态工厂方法中使用返回值(现在它不会编译,但我猜返回值应该是
解析器
)。返回值的可见性使使用factory方法的任何人都无法访问它


一种解决方法是找出内部类实现的公共接口,并将其用作factory方法的返回值。

您的一条“do stuff”注释是注释掉一个结束语
}
。但这可能只是因为你删除了不相关的代码,你真的需要一个内部类吗?
Parser
是否仅在
Utils
中使用?您的一条“do stuff”注释是对结束语
}
的注释。但这可能只是因为你删除了不相关的代码,你真的需要一个内部类吗?
Parser
是否仅在
Utils
内部使用?该类也可以公开。它的构造函数是私有的。谢谢你的评论。我确实尝试过这种解决方法,但随后我“失去”了对
解析器中所有“公共”方法的访问权。将对象从接口强制转换到
解析器
也是不可取的,因为它不可见。我通常想做的是允许只在Utils中创建
解析器
对象,但使用Utils中的一些静态方法从外部类检索对象,然后,当然,能够接近它的公共方法。@AndroidNewbie sebastian的意思是,通过在返回的接口中包含公共方法,调用方可以访问接口定义中包含的那些方法。该类也可以公开。它的构造函数是私有的。谢谢你的评论。我确实尝试过这种解决方法,但随后我“失去”了对
解析器中所有“公共”方法的访问权。将对象从接口强制转换到
解析器
也是不可取的,因为它不可见。我通常想做的是允许只在Utils中创建
解析器
对象,但使用Utils中的一些静态方法从外部类检索对象,然后,当然,能够接近它的公共方法。@AndroidNewbie sebastian的意思是,通过在返回的接口中包含公共方法,调用方可以访问接口定义中包含的方法。