Gibt es eine Standardtechnik zum "Erweitern" einer Klasse mit privaten Konstruktoren, wie bei den meisten Singleton-Klassen? Speziell versuche ich, die java.lang.management.ThreadInfo
Klasse zu erweitern, weil ich eine Menge von ihnen zu einem HashSet
hinzufüge, um Eindeutigkeit zu steuern. Die Art, wie ich feststelle, ob zwei Threads gleich sind, ist jedoch unterschiedlich und nicht identisch mit der Standardimplementierung der Methode equals()
.Verfahren zum Erweitern einer Klasse mit privaten Konstruktoren
Die Erweiterung der Klasse ist in diesem Fall offensichtlich keine Option.
Wäre es sinnvoll sein, so etwas wie eine Wrapper-Klasse zu machen, die ein ThreadInfo
im Konstruktor übernimmt und dann auffüllt manuell alle relevanten Felder mit den Werten, dann überschreibt equals()
und hashCode()
, oder gibt es einen besseren Weg, dies zu tun?
So etwas ist, was ich zu schreiben fange, aber eine bessere Umsetzung wäre ideal:
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
}
}
Aber das fühlt sich an wie ein sehr Umwege einige grundlegende Funktionalität zu erreichen. Ich habe es untersucht, und Implementierungen von Sets mit benutzerdefinierten Comparators sind in der Java-Standardbibliothek nicht vorhanden. Ich denke, ich könnte meine eigene Hash-Set-Implementierung schreiben, aber das ist zu viel Arbeit für eine einfache Situation. Alle Einsichten wären hilfreich.
Ich bin mir ziemlich sicher, dass solche Klassen nicht erweitert werden können. –
@JakobWeisblat Eigentlich können sie erweitert werden, aber nur durch ihre inneren Klassen, die in dieser Situation nicht hilfreich ist. Ich verstehe, dass es nicht funktioniert, sie in meiner eigenen Klassendatei zu erweitern. Ich suche nach vernünftigen Alternativen und speziell, um zu sehen, ob es irgendwelche Standardpraktiken gibt. Ich konnte nichts finden, nachdem ich nach etwas gesucht hatte. – Kon
viel Glück dann. –