Sorudaki kod örneğine gelince, standart çözüm sınıfa açıkça adıyla başvurmaktır ve getClassLoader()çağrı yapmadan da yapmak mümkündür :
class MyClass {
public static void startMusic() {
URL songPath = MyClass.class.getResource("background.midi");
}
}
Bu yaklaşımın, yine de bu kodu benzer sınıflara çoğaltmanız gerektiğinde kopyala / yapıştır hatalarına karşı çok güvenli olmadığı bir arka tarafı vardır.
Başlıktaki kesin soruya gelince, bitişik evrede bir numara var :
Class currentClass = new Object() { }.getClass().getEnclosingClass();
ObjectYürütme bağlamını elde etmek için iç içe anonim bir alt sınıf kullanır . Bu hile, kopyala / yapıştır güvenli olma avantajına sahiptir ...
Bunu diğer sınıfların miras aldığı Temel Sınıfta kullanırken dikkat edin:
Bu pasajın bazı temel sınıfların statik bir yöntemi olarak şekillendirilmesi durumunda, currentClassdeğerin, bu yöntemi kullanan herhangi bir alt sınıfa değil, her zaman bu temel sınıfa referans olacağını belirtmek gerekir.
getResource()Önceden kullanıldığında , kullanıcı tanımlı (örn. J2SE olmayan) bir sınıf örneği bazen başarısız olur. Sorun, JRE'nin sınıf yolunda (bootstrap yükleyicisinin) uygulama kaynaklarına sahip olmayacak şekilde bootstrap sınıf yükleyicisini kullanmasıdır.