2015-05-03 13 views
6

Ben bir yöntem dahilinde böyle koduna sahip başlatıldı olmayabilirdi:nihai değişken

final TouchableSpan touchableSpan = new TouchableSpan() { 

    @Override 
    public void onClick(View widget) { 
     this.setPressed(true); 

     String extravar = touchableSpan.getMyVar(); 
    } 

bu hat String extravar = touchableSpan.getMyVar(); ben değişken touchableSpan başlatılmamış olabileceğini bir uyarı olsun. Neden var

Bu uyarı, final değiştiricisini eklediğimde ortaya çıktı. variable is access from inner class, needs to be declared final'dan önce.

+1

"TouchableSpan" öğesinin bir kurucu olan 'TouchableSpan() {this.onClick (null);}} veya benzeri olduğunu varsayalım. – immibis

+1

Bu kesinlikle bazı "kötü koku" vardır. Eğer 'onClick() 'yönteminiz gerçekten de TouchableSpan sınıfının ** dışındaki bir öğeye ** erişmesi gerekiyorsa; o zaman örneğin "dış eleman" ı bir kurucu aracılığıyla sağlamanız gerekir. Kod, o sınıfın koduyla yeni bir TouchableSpan nesnesi yaratan kısmı ... ... son derece birleştiriyor. Bunu yapma! – GhostCat

+0

@ Jägermeister, evet, this.getMyVar() işlevini '@ Tagir' olarak önereceğim. –

cevap

9

İlk önce anonim bir sınıf oluşturup son değişkene atayın. Böylece, onClick yönteminiz teorik olarak son değişken başlatmadan önce çağrılabilir. Neden sadece this.getMyVar() kullanıyor?

İlgili konular