제한하고 싶습니다. (Java에서) 클래스의 직접적인 인스턴스의 경우, n에, 즉 언제든지 클래스의 직접 객체가 메모리에 n 개 이상 존재하지 않는다고 말합니다. 그러나 아니오에 그러한 제한이 없습니다. 이 클래스의 서브 클래스와 같은 간접 객체 자바에서 이것을 달성 할 수있는 방법이 있습니까?한도 번호. Java 클래스의 인스턴스를
답변
당신은 할 수 있습니다 :
static final AtomicInteger count = new AtomicInteger();
// in your parent constructor.
if (getClass() == Parent.class && count.incrementAndGet() >= LIMIT)
throw new IllegalStateException();
이것은 출시 된 인스턴스에 대한 설명이 아닙니다 –
메인 클래스의 finalize 메소드를 오버라이드하는 것과 함께 메인 생성자 내부에서 이것이 작동해야한다고 생각합니다. 감사. –
인스턴스를 사용하면 인스턴스가 제한을 초과하는 경우 예외를 던집니다.
http://www.oodesign.com/factory-pattern.html
아래 거친 샘플 구현입니다.
public class AnyClass {
private static final int limit_ = 8;
private static int count = 0;
private AnyClass() {}
public static synchronized AnyClass getInstance() {
if (count < limit_) {
AnyClass anyClass = new AnyClass();
count++;
return anyClass;
}
return null;
}
}
직접 생성을 통해 공장을 우회하는 것을 막기 위해 생성자를 비공개로 설정하는 것을 잊지 마십시오. – JTMon
릴리스 된 인스턴스를 고려하지 않습니다. –
릴리스 된 인스턴스에 대한 재정의를 위해 재정의합니다. –
자바는 기본적으로 이러한 가능성을 제공하지 않습니다.
나는 풀링 된 팩터 리로 직접 또는 클래스 생성자에서 직접 관리 할 수 있다고 생각합니다. INSTANCES> MAX_LIMIT 인 경우 생성자에서 static 카운터 INSTANCES (클래스의 비공개 숫자로 정의 됨)를 확인한 다음 예외를 throw합니다. 나는이 일을 생각
이것은 출시 된 인스턴스를 고려하지 않습니다. –
는 (사용 사례를 모르고) 나쁜 생각이지만, 어쨌든 ...
당신은 그 클래스의 생성자에서 일부 코드를 넣어 모든 인스턴스를 셀 수 있습니다. 하위 클래스의 인스턴스를 무시해야하는 경우getClass()
에 의해 반환 된 값을 확인하십시오.
인스턴스가 해제 된시기를 알아 보려면 weak references 및 WeakHashMap을 사용하여 아직 사용중인 인스턴스 수를 추정 할 수 있습니다. 가비지 콜렉션은 예기치 않은 시간에 인스턴스를 제거하기 때문에 사용중인 실제 인스턴스 수는 더 낮을 수 있습니다. 정확한 숫자의 경우 인스턴스가 더 이상 사용되지 않는다는 것을 알 때 명시 적으로 메소드를 호출해야합니다.
- 1. Java WebDriver : Coordinates 클래스의 인스턴스를 얻으려면 어떻게해야합니까?
- 2. Java HttpsURLConnection 아웃 바운드 한도?
- 3. 항상 클래스의 인스턴스를 만드시겠습니까?
- 4. 클래스의 인스턴스를 반환하는 방법?
- 5. 클래스의 인스턴스를 얻는 방법
- 6. Java 클래스의 단일 인스턴스
- 7. 파이썬에서 같은 클래스의 정의로 클래스의 인스턴스를 만듭니다.
- 8. 접근 방식 : 서로 다른 두 클래스의 인스턴스를 갖는 Java 배열
- 9. 클래스의 새 인스턴스를 만들 때 Java 재정의 메서드
- 10. Java Reflection을 사용하여 중첩 클래스의 인스턴스를 만들 수 있습니까? 코드의
- 11. 단일 Java 클래스 파일에서 클래스의 인스턴스를 둘 이상 만들려면 어떻게해야합니까?
- 12. SQL 쿼리에서 클래스의 인스턴스를 만듭니다
- 13. 새로운 클래스의 인스턴스를 생성하고 배열
- 14. 자주 액세스하는 클래스의 인스턴스를 캐쉬해야합니까?
- 15. 클래스의 인스턴스를 만들 수 없습니다
- 16. ruby - 현재 클래스의 인스턴스를 반환합니다.
- 17. CustomLineCap 클래스의 인스턴스를 serialize하는 방법
- 18. 클래스의 인스턴스를 삭제하는 방법은 무엇입니까?
- 19. 클래스의 인스턴스를 만드는 다른 방법
- 20. AS3은 선택 객체와 클래스의 인스턴스를
- 21. 숫자로 클래스의 특정 인스턴스를 찾으려고합니다.
- 22. 클래스의 두 인스턴스를 비교하는 방법
- 23. Python에서 클래스의 정적 인스턴스를 생성하십시오.
- 24. 클래스의 두 인스턴스를 가져 오시겠습니까?
- 25. Eclipse에서 디버깅하는 동안 클래스의 인스턴스를 모두 찾으십시오.
- 26. C#은 어떻게 클래스의 인스턴스를 생성합니까?
- 27. Java JTextArea 줄 번호
- 28. Java : 추상 클래스의 최종 변수
- 29. Java : 플레이어 번호 변경
- 30. Java RMI 추가 번호
이러한 요구 사항의 비즈니스 사례를 알고 싶어합니다. – Vikdor
네가 궁금한 점이 왜 그렇게 필요한지. Java는이를 위해 설계되지 않았습니다. 내가 생각할 수있는 두 가지 방법은 인스턴스가 공개 될 때 계산할 수 있도록 허용 할 것이지만 둘 다 매우 권장하지 않습니다. – Dunes
인스턴스를 계산하는 특별한 플러그인으로 jvisualvm을 시작하면 이런 종류의 작업을 수행 할 수 있을지 궁금합니다. 아마도 어리석은 생각이지만 기술적으로 가능합니까? –