Esiste una tecnica standard per "estendere" una classe con costruttori privati, come con la maggior parte delle classi Singleton? In particolare, sto cercando di estendere la classe java.lang.management.ThreadInfo
perché sto aggiungendo un sacco di loro a un HashSet
per controllare l'unicità. Tuttavia, il modo in cui determino se due thread sono uguali è diverso e non identico all'implementazione predefinita del metodo equals()
.Tecnica per estendere una classe con costruttori privati
L'estensione della classe non è ovviamente un'opzione in questo caso.
sarebbe ragionevole fare qualcosa di simile a una classe wrapper che accetta un ThreadInfo
nel costruttore e poi popola manualmente tutti i campi pertinenti con il valore e poi prevale equals()
e hashCode()
, o c'è un modo migliore per fare questo?
Qualcosa di simile è quello che sto iniziando a scrivere, ma un'implementazione migliore sarebbe l'ideale:
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
}
}
Ma questo si sente come un modo molto indiretto per ottenere alcune funzionalità di base. Ho esaminato il problema e le implementazioni di set con comparatori personalizzati non esistono nella libreria standard Java. Suppongo che potrei scrivere la mia implementazione di hash set ma è troppo lavoro per una situazione semplice. Qualsiasi intuizione sarebbe utile.
Sono abbastanza sicuro che tali corsi non possano essere estesi. –
@JakobWeisblat In realtà, possono essere estesi, ma solo dalle loro classi interne che non sono utili in questa situazione. Capisco che estenderli nel mio file di classe non funzionerà. Sto cercando alternative ragionevoli e in particolare per vedere se ci sono pratiche standard. Non ho trovato nessuno dopo aver cercato un po '. – Kon
buona fortuna allora. –