私は(この問題を持たない他の多くのUtilクラスの中でも)プライベートコンストラクタを持つテストに失敗したFileUtilクラスを持っています。私のプライベートコンストラクタは、リフレクションでチェックされているときに公開されるのはなぜですか?
クラス定義は次のとおりです。
public final class FileUtil {
/**
* Hidden constructor to prevent instantiation.
*/
private FileUtil() {
}
// ...
// many static methods
}
上述したように、私はプライベートコンストラクタを持つためにテストされている他の多くのクラスを持っています。
@Test
public void testPrivateConstructor() throws Exception {
Constructor<FileUtil> constructor = FileUtil.class.getDeclaredConstructor();
Assert.assertTrue("Constructor is not private", Modifier.isPrivate(constructor.getModifiers()));
constructor.setAccessible(true);
constructor.newInstance();
}
しかし、このクラスのため - とだけこのクラスのために - isPrivate()メソッドはfalseを返し、デバッガで確認する場合は、コンストラクタは確かに公共のものとして示されている:試験方法はあります。しかし、コンストラクタをプログラムで呼び出そうとすると、Eclipseはメソッドが表示されていないことを通知します。
私はEclipseとMavenで作業しています。問題はMavenビルドを呼び出すときにEclipseとコマンドラインに表示されます。だから本当にJavaの問題ですが、私はこのパターンを問題なくライブラリに使用しているので、なぜこのクラスで失敗するのか分かりません。
どのような考えですか?
'FileUtil'は一般的な名前なので、別の' FileUtil'クラスを使用している可能性があります。いずれにしても、上記のコードはそのままで、 'isPrivate'に' false'を与えるべきではありません。 – tsolakp
これを単独でテストするには[mcve]を作成しましたか?私はやったし、うまく動作するので、@tsolakpと@DwBの提案は正しいと確信しています...あなたは別の 'FileUtil'を見ています。このようなものについては、投稿する前に必ず[mcve]を作成してください。自分で問題が見つからない場合は、投稿するときに誰かがすぐに再現して検証できることがあります。 –
@ジムガリソンはこれを指摘してくれてありがとう。私は例を作成するときに以下の解決策を見つけました;-) –