2015-01-26 19 views
7

ana argümanları Erişme:Verilen statik başlatıcısı

public class MyClass { 

    static { 
    // Access to args is needed here 
    } 

    public static void main(String[] args) { 
    ... 
    } 
} 

yukarıda bahsettiğim statik blokta args erişmek istiyorum.

Statik bloğun, sınıf yüklendiğinde (veya başlatıldığında) ve statik ana işlevden önce yürütüldüğünün farkındayım, ancak yine de bu hatalara erişmenin mümkün olup olmadığını merak ediyordum.

Btw - benim hedefim, log4j yapılandırılmadan önce (ana sisteme aktarılan bağımsız değişkenlerden türetilen sistem özellik değişkeni kullanılarak) çalışma zamanında log dosyasının adına eklemek. Statik bloktan ana ait

+1

Hayır, ama doğrudan sistem özelliklerine güvenebilirsiniz: Ben argümanlarla programım bitti aaa bbb aşağıdaki çıktıyı aldım

static { System.out.println(System.getProperty("sun.java.command")); } 

. – biziclop

cevap

4

gibi statik blok içinde

java -Dmyvar=value ... 

Ve erişimi bunu: Ana argümanlar geçen Yerine (veya Inaddition) i Sistem gibi parametre kullanmak öneririm. java.command "tüm komut satırını içerir. İşte

bir örnek:

com.MyClass aaa bbb 
+0

BTW - Bunun sanal makinenin uygulanmasından bağımsız olup olmadığını biliyor musunuz? –

+0

Üzgünüm, bunun Sun/Oracle JVM için olduğunu söylemeyi unuttum. Ancak bunun OpenJDK tarafından desteklendiğine inanıyorum ve IBM ve JRokit hakkında ne olduğu hakkında fikrimiz yok. – AlexR

+0

Sadece bu bir antipattern olup olmadığını merak ediyorum. Üzerinde, args dizisinin enjeksiyon zincirini atlıyorduk, fakat diğer yandan, ana yöntemin uygulanmasından önce gerçekleşen, sınıf yükü üzerinde statik başlatıcılar çalıştırılmakta mantıksal olarak gereksiz görünüyor. –

4

Sen cant giriş argümanlar. Özel bir sistem özelliği "Güneş yoktur

static { 
    String parameterValue = System.getProperty("myvar"); 
    ... 
} 
İlgili konular