Czy istnieje standardowa technika "rozszerzania" klasy na prywatnych konstruktorów, tak jak w przypadku większości zajęć Singleton? Dokładniej, próbuję rozszerzyć klasę java.lang.management.ThreadInfo
, ponieważ dodaję DUŻO z nich do HashSet
, aby kontrolować wyjątkowość. Jednak sposób, w jaki ustalam, czy dwa wątki są równe, jest inny i nie jest tożsamy z domyślną implementacją metody equals()
.Technika rozszerzenia klasy o prywatnych konstruktorów
Rozszerzenie klasy oczywiście nie jest w tym przypadku możliwe.
uzasadnione byłoby zrobić coś podobnego klasy otoki, który akceptuje ThreadInfo
w konstruktorze, a następnie ręcznie wypełnia wszystkie odpowiednie pola z wartościami, a następnie nadpisuje equals()
i hashCode()
, czy istnieje lepszy sposób to zrobić?
Coś w tym jest to, co zaczynam pisać, ale lepsza realizacja byłby idealny:
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
}
}
Ale to czuje się jak bardzo okrężną drogą do osiągnięcia pewnych podstawowych funkcji. Zajrzałem do tego, a implementacje zestawów z niestandardowymi komparatorami nie istnieją w standardowej bibliotece Java. Przypuszczam, że mógłbym napisać własną implementację zestawu hasha, ale to za dużo pracy na prostą sytuację. Wszelkie spostrzeżenia byłyby pomocne.
Jestem przekonany, że takich zajęć nie można przedłużać. –
@JakobWeisblat W rzeczywistości mogą one zostać przedłużone, ale tylko przez ich wewnętrzne klasy, które nie są pomocne w tej sytuacji. Rozumiem, że rozszerzenie ich w moim własnym pliku klasowym nie będzie działać. Poszukuję rozsądnych alternatyw, a konkretnie sprawdzam, czy istnieją jakieś standardowe praktyki. Poszukiwania nie mogłem znaleźć. – Kon
powodzenia. –