필자는 (이 문제가없는 많은 다른 Util 클래스 중에서) private 생성자를 갖는 테스트에 실패한 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를 반환하고 디버거에서 확인하면 생성자가 실제로 public으로 표시됩니다 : 시험 방법이다. 그러나 생성자를 프로그래밍 방식으로 호출하려고 시도하면 Eclipse는 메서드가 표시되지 않는다고 전합니다.
나는 이클립스와 메이븐과 함께 일하고 있는데, 이클립스와 메이븐 빌드를 호출 할 때 커맨드 라인에 문제가있다. 그래서 실제로 자바 문제입니다. 그러나이 패턴을 문제없이 라이브러리에서 사용하기 때문에이 클래스에서만 실패하는 이유는 알 수 없습니다.
의견이 있으십니까?
'FileUtil'은 일반적인 이름이기 때문에 다른 'FileUtil' 클래스를 사용하고있을 수도 있습니다. 어쨌든 위 코드는'isPrivate'에'false'를 부여해서는 안됩니다. – tsolakp
[mcve]를 분리하여 테스트 했습니까? 나는 해냈고 잘 작동하기 때문에 @tsolakp와 @DwB의 제안은 정확할 것이라고 거의 확실하다 ... 당신은 다른'FileUtil'을보고있다. 이와 같은 것들을 위해서 항상 게시하기 전에 [mcve]를 만드십시오. 문제를 직접 발견하지 못하면 게시물을 올리면 누구나 신속하게 재현하고 확인할 수 있습니다. –
@JimGarrison이 이것을 지적 해 주셔서 감사합니다. 예제를 만들 때 아래의 해결책을 찾았습니다 ;-) –