Ich brauche ein Verfahren funktionell ähnlich den folgenden implementieren:Wie bekomme ich den Typ-Namen in einem generischen Methodenaufruf übergeben?
static <T extends Object> T validateObj (T obj) throws ValidationException {
// ValidationException is a custom Exception class
if (obj == null) {
throw new ValidationException(T.class.getSimpleName() + errorMsgTemplate);
} else {
return obj;
}
}
Ein Beispiel dafür, wie die Funktion, die durch das System verwendet wird:
try {
RandomAccessFile file = getFile(pathName, "r"); // Custom method. May return null
file = Validator.validateObj(file);
} catch (Exception e) {
// Handle exception
}
// Use file
Bei dem Versuch, Fehler zu protokollieren, wie kann ich erhalten, der Klassenname von T für jeden bestimmten Methodenaufruf, unabhängig davon, ob das übergebene tatsächliche Objekt null
ist oder nicht? Der Typ der Objektvariable, die an die Validierungsmethode übergeben werden soll, ist der Methode caller immer bekannt.
Update: Während ich Bambino's Antwort wählte, hier ist ein Shoutout zu StuPointerException's Antwort. Aufgrund der Einschränkungen beim Umgang mit bestehendem Code ist seine Antwort eher für mein spezifisches Problem geeignet. Ich glaube jedoch, dass die Antwort von Bambino die korrektere Implementierungslösung im Allgemeinen ist.
Hmm, also meinen Sie den Klassennamen von außen zu übergeben? Irgendeine Idee, wenn Sie es auf Ihre Art tun oder einen String-Wert von 'simpleName()' übergeben, ist besser in Bezug auf die Belastung der Overheads, oder ist es egal? – thegreatjedi
Pass auf jeden Fall die 'Klasse' auf, dies ist ein Standardmuster um solche Szenarien zu umgehen. Es gibt nur minimale Gemeinkosten. – StuPointerException
Ok, vielen Dank – thegreatjedi