자바 반사 파괴 방지 단일 모드
3601 단어 배 움 의 길
public class SingletonClass {
// private static final Boolean flag = Boolean.FALSE;
private static ImmutableBoolean flag = new ImmutableBoolean();
private SingletonClass() {
if (flag.getCount() <= 0) {
synchronized (SingletonClass.class) {
if (flag.getCount() <= 0) {
flag.setCount();
} else {
throw new RuntimeException(" 1");
}
}
} else {
throw new RuntimeException(" 2");
}
}
private static SingletonClass singletonClass = null;
public static SingletonClass getInstance() {
if (singletonClass == null) {
synchronized (SingletonClass.class) {
if (singletonClass == null) {
singletonClass = new SingletonClass();
}
}
}
return singletonClass;
}
private static class ImmutableBoolean {
private static int count = 0;
public ImmutableBoolean() {
}
public void setCount() {
synchronized (SingletonClass.class) {
if (count <= 0) {
count ++;
} else {
throw new RuntimeException("");
}
}
}
public int getCount(){
return count;
}
}
}
public class TestClass {
public static void main(String[] args) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException {
SingletonClass s1 = SingletonClass.getInstance();
// System.out.println(s1);
Class c1 = SingletonClass.class;
// s1.new ImmutableBoolean();
// SingletonClass.ImmutableBoolean
// Field[] fields = c1.getDeclaredFields();
// for (Field field : fields) {
// System.out.println(field.getName());
// if ("flag".equals(field.getName())) {
// field.setAccessible(true);
// Class c2 = field.getClass();
// System.out.println(c2.getName());
//// Class c3 = field.
//// System.out.println(c3.getName());
//// field.
//// field.setBoolean(s1, false);
//// break;
// }
// }
Constructor constructor = c1.getDeclaredConstructor();
constructor.setAccessible(true);
SingletonClass s2 = constructor.newInstance();
System.out.println(s1 == s2);
}
}
저 는 개인 적 인 내부 류 를 정의 한 다음 에 이 내부 류 의 속성 으로 flag 를 사용 합 니 다. 그러면 바깥 의 다른 류 는 이 개인 적 인 내부 류 를 얻 지 못 하고 그 값 을 바 꾸 지 못 해서 단일 사례 의 실현 을 보호 합 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
자바 반사 파괴 방지 단일 모드오늘 우 리 는 자바 의 반사 체 제 를 사용 하여 단일 사례 를 파괴 하 는 것 을 어떻게 방지 하 는 지 말 합 니 다.인터넷 에서 많은 것 을 찾 아 보 았 습 니 다. 단일 사례 의 클래스 에 boolean ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.