0

我创建了一个公共的“Utils”类,在其中放置了一些常用的静态方法。在那个 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 类)

提前致谢。

4

2 回答 2

3

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

一种解决方法是提取内部类实现的公共接口并将其用作工厂方法的返回值。

于 2014-01-21T14:49:09.950 回答
2

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

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

于 2014-01-21T14:48:41.530 回答