2012-06-20 22 views
7

Statik bloktan dönmek istiyorum. İade ve break ifadesi çalışmıyor gibiJava'da statik başlatma bloğundan nasıl dönülür

görünüyor. Başka alternatif var mı?

Kötü geçici çözüm bir bayrak oluşturmak ve devam etme veya etmeme bayrağını kontrol edilebilir biliyorum.

Ben başlatma blokları hesaplamaları yapmak için ama sadece sınıf yükleme sırasında temel başlatılması için bir anlamı olmadığını anlıyoruz. Bunun yerine sadece bir if da koşullu kodunu sarın return kullanmanın

+3

kaynak kodunu lütfen bildirin –

+0

Sorunu anlayamıyorum. Lütfen açık bir şekilde açıklayın veya kolay anlaşılması için kodunuzu sağlayın. –

+1

@Kalai Sanırım, "dönüş" bir başlatıcı bloğu içinde kullanılamaz anlamına gelir. JLS 14.17: "[...] Bir örnek başlatıcıda veya bir statik başlatıcıda bir dönüş ifadesi varsa [...]" –

cevap

18

Delege özel statik yönteme kodu:

static { 
    initialize(); 
} 

private static void initialize() { 
    foo(); 
    if (someCondition) { 
     return; 
    } 
    bar(); 
} 
+0

temizleyici yolu blokları yazmak için bir yol varsa bir derleme zamanı hatasıdır. –

0

Statik bir başlatıcı bloktan döndüremez. Geri dönmek için hiçbir yer yok. Ama gerekli olmamalı. Kodunuzu "tek giriş, tek çıkış" olarak yeniden yapılandırabilmeniz gerekir.

+0

Bu ifadeyi kabul etmek zorundayım, aynı zamanda daha temiz (ve okunması kolay) kodlar da sağlardı. – Anders

0

Statik bloktan dönüş yapamazsınız, ancak mantığınızı gerçekleştirecek ve bloğa geri dönecek başka bir işlev kullanmanız daha iyi olur.

1

Statik olan başlatıcı karmaşık olan hiçbir iş var, bu yüzden muhtemelen kötü bir fikir (eğer sese almayın bile) var.

bir dönüş elde minimal bir şekilde etiketlenmiş bir ara kullanmaktır.

static { 
    init: { 
     ... 
      break init; 
    } 
} 

Bunlar genellikle iç içe for döngüler görünen, oldukça nadirdir. Yenilik okuyucuya biraz tehlikeli bir şeylerin yol açtığını bildirebilir.

İlgili konular