대부분의 Singleton 클래스와 마찬가지로 private 생성자를 사용하여 클래스를 "확장"하는 표준 기술이 있습니까? 구체적으로 말하자면, java.lang.management.ThreadInfo
클래스를 확장하려고 시도하고 있습니다. 왜냐하면이 클래스를 고유성을 제어하기 위해 HashSet
에 추가하기 때문입니다. 그러나 두 스레드가 동일하면 결정하는 방법은 다르며 equals()
메서드의 기본 구현과 동일하지 않습니다.개인 생성자를 사용하여 클래스를 확장하는 기술
이 경우 클래스 확장은 분명히 옵션이 아닙니다.
는 생성자에서ThreadInfo
을 허용하는 래퍼 클래스처럼 뭔가를 할 합리적 후 수동으로 다음의 값으로 모든 관련 필드를 채 웁니다
equals()
및
hashCode()
을 무시하거나,이 작업을 수행 할 수있는 더 좋은 방법이겠습니까?
class ThreadInfoWrapper {
private ThreadInfo info;
ThreadInfoWrapper(ThreadInfo info) {
this.info = info;
}
//Populate instance variables with Thread.State, thread ID, etc.. with
//Getters/setters and all that other stuff
public boolean equals(Object o) { //Unique implementation
}
public int hashCode() { //Whatever implementation
}
}
을하지만 몇 가지 기본적인 기능을 달성하기 위해 매우 로터리 방식 같은 느낌이 같은
뭔가 내가 쓰기 시작 했어,하지만 더 나은 구현이 이상적 일 것이다 것입니다. Java 표준 라이브러리에는 사용자 정의 Comparator가있는 Sets의 구현이 존재하지 않습니다. 나는 내 자신의 해시 집합 구현을 쓸 수 있다고 생각하지만 그것은 단순한 상황에서 너무 많은 일이다. 모든 통찰력이 도움이 될 것입니다.
저는 이러한 클래스를 확장 할 수 없다고 확신합니다. –
@JakobWeisblat 실제로 이러한 클래스는 확장 될 수 있지만 이러한 상황에서는 도움이되지 않는 내부 클래스에 의해서만 확장 될 수 있습니다. 내 클래스 파일에서 확장하는 것이 효과가 없다는 것을 이해합니다. 합리적인 대안을 찾고 특히 표준 사례가 있는지 알아 보겠습니다. 나는 조금을 찾은 후에 아무 것도 찾을 수 없었다. 그러면 – Kon
행운을 빕니다. –