2013-01-05 35 views
0

定義的內部類裏面我簡單的類添加到我的應用程序:類型不能指非最終變量Asortiment在不同的方法

public class Nomenklatura implements Serializable 
    { 
     private Boolean SmenaIsOpen=false; 
     public Nomenklatura() 
     { 
      SmenaIsOpen=false; 
     } 
     public String OpenSmena() 
     { 
      SmenaIsOpen=true; 
      return "ok"; 
     } 
     public String CloseSmena() 
     { 
      return "ok"; 
     } 
     public Boolean GetSmenaIsOen() 
     { 
      return SmenaIsOpen; 
     } 
     public void SetSmenaIsOen(Boolean val) 
     { 
      SmenaIsOpen=val; 
     } 

    } 

申請應與一個對象這個類的工作。 當我使用它在活動:

@Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.presmena); 
     Nomenklatura Asortiment; 
     Asortiment=(Nomenklatura) getIntent().getExtras().getSerializable("Nomenklatura"); 
     Button but1=(Button) findViewById(R.id.button1); 
      but1.setOnClickListener(new OnClickListener() 
      { 
       @Override 
       public void onClick(View arg0) 
       { 
        if(Asortiment.GetSmenaIsOen()) Asortiment.CloseSmena(); 
        else Asortiment.OpenSmena(); 
       } 
      }); 
    } 

我得到錯誤:不能指非最終變量Asortiment在一個不同的方法Presmena.java限定的內部類的內部。 幫助理解,什麼是錯的

+0

確定最終結果:'最終Nomenklature Asortiment =(Nomenklatura)...'。 –

+0

並請尊重Java命名約定。變量以小寫字母開頭。方法也是如此。也讀這篇文章:http://stackoverflow.com/questions/11185321/when-should-null-values-of-boolean-be-used/11185400#11185400 –

回答

0

聲明像這樣

final Nomenklatura Asortiment = ... 

,它應該工作。當你聲明內部類並且讓它們使用你的局部變量時(如果你仔細想想,它們通常不在內部範圍內),它們需要被捕獲。在Java中,您需要將這些變量標記爲final,以避免意外行爲。

0

您必須聲明你的Asortiment變量作爲最終

final Nomenklatura Asortiment; 
+0

你必須在這裏初始化'Asortiment'到一些值。因爲它是最終的,你以後將無法初始化它。 –

+0

好吧,你必須初始化它,但你不必在這裏做。 你可以寫這樣的東西 final Object obj; obj = new Object(); 它將是有效的 –

+0

是的,你是對的。我認爲這是被禁止的。 –

相關問題