2016-02-09 32 views
5

Kod temizliyordum ve statik üyeye tüm erişimi, tanımlandıkları sınıf tarafından kalifiye olacak şekilde değiştiriyordum. Ancak bu, beni şaşırtan aşağıdaki soruna yol açıyor.Özel statik alanlar, çevreleyen tarafından kalifiye olduğunda iç içe geçmiş sınıftan görülebilir mi?

İç içe geçmiş bir sınıf içinde bir sınıf var. Bu iç içe geçmiş sınıftaki ek açıklamada, çevreleyen sınıftaki özel bir statik final alanına başvuruyorum. Bunu yeterlilik olmadan yaparken (aşağıdaki D notu ekinde olduğu gibi) bu çalışır. Ancak, sınıf niteleyicisini eklerken (C sınıfındaki ek açıklamada olduğu gibi) derleyici alana (v aşağıda) görünmüyor.

Her iki durumda da değişken aynı alana atıfta bulunur, bu yüzden neden olur?

+2

Özellikle "OuterClass.privateStaticField" deyimine başvurulduğunda derlendiğinde ilginç değil, çünkü iç içe geçmiş bir sınıfın içinden, tutarsız görünen bir yöntemden derleriz ... – Mena

+0

Ek açıklama parametreleri derleme zamanı çözümlenebilir olmalıdır (bizim durumumuzda, sabit ifadeler), derleyicide bir aksaklık gibi görünüyor. – biziclop

+0

Hangi javac sürümü kullanılıyor? – hahn

cevap

4

Bu, gerçekten olması gerektiği gibi 1.8.0_25 ve 1.7.0_45 javac ile iyi bir şekilde derlenir. Ya da her ikisi de başarısız olmalı, bu da tutarlı olacaktır.

Bu (eğer mutlu Normal koddan aynı sabiti başvurabilir neden olan) Eclipse'nın açıklama taşıma bir hata gibi görünüyor, bu reported oldukça uzun zaman önceydi ama geçen üzerinde çok aktiviteyi orada beeen değil 4 yıl.

+0

Ayrıca javac ile sorunsuz bir şekilde derlemeyi başardım. Gerçekten Eclipse kullanıyordum, bu yüzden büyük olasılıkla aynı hata – miselico

+0

@miselico Etrafında çalışmak çok kolay olduğundan, düzeltmek için hataların listesinden oldukça uzun bir yol olmasını beklerdim. Eclipse derleyicisinin bundan daha büyük sorunları var :) – biziclop