1

我想这是一个糟糕的模式,修复它的最佳方法是什么?

我的意思是我希望每个人都使用带有 2 个参数的构造函数,但我需要保留默认构造函数,因为它实现了一个侦听器,该侦听器在没有 args 的情况下对其进行类加载。我想向除使用它的侦听器处理程序之外的任何其他人隐藏默认构造函数,并使另一个作为实例化的唯一点。

有什么注释吗?某些类的任何隐私修饰符(系统调用者不在同一个包中)?

4

2 回答 2

1

这对我来说似乎很好。如果你想在单元测试期间以不同的方式实例化一个类,你会做同样的事情。

哦,我看到您需要一个具有比受保护更多但比公共更少访问权限的构造函数。不幸的是,这是不可能的。

于 2012-09-07T21:13:37.940 回答
1

您可以将您的类和需要使用空构造函数MyClass的侦听器放在同一个包中。MyListener然后,将空构造函数的访问权限设置为package-level

package com.stackoverflow.foo;

public class MyClass {
  MyClass () {  // package-private (no explicit access modifier) 
  }

  public MyClass(int a, int b) {  // public
  }
}

package com.stackoverflow.foo;

public class MyListener {
  private MyClass ref = new MyClass(); // MyListener is on the same package as MyClass, so this is valid
}

这样,您可以确保只有在同一个包中的类MyClass才能使用默认构造函数。

于 2012-09-07T21:16:43.603 回答