2013-02-28 22 views
-1

我對編碼相當陌生。我想防止重複的代碼,我需要調用大約10次。我讀過關於內部課程的內容,但我無法使用它。在這裏,我想要做的事:Java調用內部類來防止dublicate代碼

public class convert { 

EditText TBText; 
EditText GBText; 

public void Reset() 
{ 
    GBText.setText(""); 
} 

@Override public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    TBText = (EditText) findViewById(R.id.widgetTB); 
    GBText = (EditText) findViewById(R.id.widgetGB); 

    TBText.addTextChangedListener(new TextWatcher() { 

    @Override 
    public void afterTextChanged(Editable s) { 

    if (TBText.hasFocus() == true) { 
    if (TBText.getText().length() > 0) { 
    MessageFormat df = new MessageFormat("{0,choice,0#{0,number,'#.####'}|9999999999999999999<{0,number,'######.######E0'}}", 
    Locale.ENGLISH); 
    GBText.setText(String.valueOf(df.format(new Object[] { Float.valueOf(TBText.getText().toString()) * 1024 }))); 

    } 
    else { 
    convert a = new convert(); 
    a.Reset(); 
    } 
    } 
} 

@Override 
    public void beforeTextChanged(CharSequence arg0, int arg1,int arg2, int arg3) { 
    } 

@Override 
    public void onTextChanged(CharSequence s, int start, int before,int count) { 
    } 
}); 

我想能夠調用「重置」類。

+0

'重置'是一種方法不是類... – codeMan 2013-02-28 04:29:37

+0

是這個android代碼? – codeMan 2013-02-28 04:30:03

+0

它只是我或甚至其他人可以注意到此代碼中的android味道? – SudoRahul 2013-02-28 04:30:27

回答

0

首先,您應該遵循Java標準代碼風格。類以大寫字母開頭,方法和變量以小寫字母開頭。

如果您嘗試使用匿名類,那麼您已經做得很好。您可以在您創建的對象的內部類上調用reset()(您會看到小寫)。

如果你想在名爲例如MyTextWatcher私有類改造這個匿名類,你會這樣寫你的轉換類中(大寫C,是):

private final class MyTextWatcher implements TextWatcher { 
    @Override 
    public void afterTextChanged(Editable s) { 

     if (tbText.hasFocus() == true) { 
      if (tbText.getText().length() > 0) { 
       MessageFormat df = new MessageFormat("{0,choice,0#{0,number,'#.####'}|9999999999999999999<{0,number,'######.######E0'}}", 
        Locale.ENGLISH); 
       gbText.setText(String.valueOf(df.format(new Object[] { Float.valueOf(tbText.getText().toString()) * 1024 }))); 

      } 
      else { 
       Convert a = new Convert(); 
       a.reset(); 
      } 
     } 
    } 

    @Override 
    public void beforeTextChanged(CharSequence arg0, int arg1,int arg2, int arg3) { 
    } 

    @Override 
    public void onTextChanged(CharSequence s, int start, int before,int count) { 
    } 
} 

那麼你可以使用這個類是這樣的:

TBText.addTextChangedListener(new MyTextWatcher()); 

注意,在現代IDE,比如Eclipse,您可以使用重構選項,一個匿名類轉換爲嵌套一個。只看菜單Refactor > Convert Anonymous Class to Nested ...

+0

我試過這個,但我得到「類型TextWatcher不能是MyTextWatcher的超類;超類必須是類」上的「私人最終類MyTextWatcher擴展TextWatcher {」行。 – 2013-02-28 14:27:40

+0

這是因爲TextWatcher實際上是一個接口,而不是一個類。在這種情況下,您應該在第一行替換* * * * *實現*。我相應地修改了我的代碼。 – 2013-02-28 14:29:19

+0

比你!有用 :) – 2013-03-01 01:52:35

0

重置不是一個類,它是一種方法。

要重置一個類,您需要將其聲明爲一個類。

在上面的例子中,一個方法將會非常好。

內部類的地方,你已經設置的代碼塊包裝的,看起來像

一個 b Ç

一個 d代碼,即模式的任意件有用 Ç

一個 f c

示例

interface MyExecuter { 
    public void execute(); 
} 

public class Outer { 

    static class Inner implements MyExecuter{ 

     private Outer o; 

     public Inner(Outer o){ 
      this.o = o; 
     } 

     public void execute(){ 
      // do something 
     } 

    } 

    public void outerDoAnExecute(MyExecuter ex){ 
     //always do same thing before execute 
     ex.execute(); // this could do anything 
     //always do same thing do after execute 
    } 

    public void outerDoSomething(){ 
     MyExecuter ex = new Inner(this); 
     outerDoAnExecute(ex); 
    } 

}