导入两个具有相同名称的实用程序类。功能还是没用?

时间:2017-10-02 13:31:41

标签: java

对于两个具有相同名称但仅包含静态方法的实用程序类,我按如下方式进行:

  1. 只需导入第一个
  2. 创建了第二个类的实例。
  3. 示例:

    package util2;
    
    public class Utility {
        public static void method() {
            System.out.println("Second Utility. static method");
        }
    }
    
    import util1.Utility;
    
    public class Component {
    
        private static final util2.Utility anotherUtility = new util2.Utility();
    
        public static void usedByReflection() {
            Utility.method();
            anotherUtility.method();
        }
    }
    
    import util1.Utility;
    
    public class Component {
    
        private static final util2.Utility anotherUtility = null; // There are some changes
    
        public static void usedByReflection() {
            Utility.method();
            anotherUtility.method();
        }
    }
    

    现在我不需要编写完整的第二个util-class名称来调用它的方法,但也许我没有预见到某些东西......?

    P.S: 类Component的方法是通过某个BlackBox的反射来调用的。所有多线程安全功能都在BlackBox中。

    UPD:我找到了更好的技巧:

    {{1}}

    现在我没有创建新对象,但是可以在没有任何错误的情况下使用它吗?

2 个答案:

答案 0 :(得分:2)

IMO,这很令人困惑,可以通过以下方式更明确地处理:

public class CombinedUtilityComponent {

    public static void usedByReflection() {
        util1.Utility.method();
        util2.Utility.method();
    }
}

或者,更好的是,在您的代码中,您可以完全限定类名,并且它们将成为唯一的名称,而不会产生任何令人困惑的技巧。

答案 1 :(得分:1)

是的,这很有效。但是,我不会这样做。

您正在调用static方法,就好像它是一个实例方法一样。 anotherUtility.method()anotherUtility有无用的引用。

您还有util2.Utility的不必要实例化。如果默认构造函数被禁用,这种技术将不起作用。