Was das Codebeispiel in der Frage betrifft, so besteht die Standardlösung darin, die Klasse explizit über ihren Namen zu referenzieren, und es ist sogar möglich, ohne getClassLoader()
anrufen:
class MyClass {
public static void startMusic() {
URL songPath = MyClass.class.getResource("background.midi");
}
}
Dieser Ansatz hat jedoch den Nachteil, dass er nicht sehr sicher gegen Copy/Paste-Fehler ist, falls Sie diesen Code in eine Reihe ähnlicher Klassen replizieren müssen.
Und was die genaue Frage in der Überschrift angeht, so gibt es einen Trick, der in der angrenzendes Gewinde :
Class currentClass = new Object() { }.getClass().getEnclosingClass();
Sie verwendet eine verschachtelte anonyme Object
Unterklasse, um an den Ausführungskontext zu gelangen. Dieser Trick hat den Vorteil, dass er kopier- und einfügungssicher ist...
Vorsicht bei der Verwendung dieser Funktion in einer Basisklasse, von der andere Klassen erben:
Es ist auch erwähnenswert, dass, wenn dieses Snippet als statische Methode einer Basisklasse geformt ist, dann currentClass
Wert ist immer ein Verweis auf diese Basisklasse und nicht auf eine Unterklasse, die diese Methode möglicherweise verwendet.