2016-09-23 4 views
0

以下の関数をJavaの1つの関数に変換する方法はありますか?私は(TestRow)を使用してそれをカスケードしようとしましたが、動作しません。Javaでカスケード接続を使用して、同じ名前の関数を単一の関数にする

public void testWindow (TestRow window, String title) { 
    if (window != null) { 
     try { 
      window.zClose(window); 
     } catch (HarnessException e) { 
      e.printStackTrace(); 
     } 
     window = null; 
    } 
} 

public void testWindow (TestColumn window, String title) { 
    if (window != null) { 
     try { 
      window.zClose(window); 
     } catch (HarnessException e) { 
      e.printStackTrace(); 
     } 
     window = null; 
    } 
} 

ここで、TestRowとTestColumnはカスタムタイプです。

コールは同じ方法ですが、カスタムウィンドウ名のため、同じ機能を何度も貼り付けてコピーする必要があります。これは避けることができます。

+1

で、このコード行window = null;を必要としないと仮定 'TestColumn'と' TestRow'が共通のインターフェース/抽象クラスを持っていた方法 'zClose'が所属しますか? –

+0

zClose()の実装を知るにはどうすればよいですか? – brijs

答えて

3

は、パラメータとして、共通のウィンドウクラスと別の方法であなたの一般的なロジックを抽出し、多くの場所で、この一般的なメソッドを呼び出します。例えば。

ここ
public void testWindow (TestRow window, String title) { 
    closeWindow(window); 
} 

public void testWindow (TestColumn window, String title) { 
    closeWindow(window); 
} 

private void closeWindow(CommonWindowsClass window) { 
    if (window != null) { 
     try { 
      window.zClose(window); 
     } catch (HarnessException e) { 
      e.printStackTrace(); 
     } 
     window = null; 
    } 
} 

CommonWindowsClassは両方TestRowTestColumnクラスのスーパークラスです。

UPDATEも、私はあなたが実際にすべての

+0

助けてくれてありがとうAndriy! –

2

継承を使用できます。ような何か:

public abstract class Test { 
    public abstract void zClose(Teste t); 
} 

public class TestRow extends Test { 
    @Override 
    public void zClose(Test t) { 
     // code... 
    } 
} 

public class TestColumn extends Test { 
    @Override 
    public void zClose(Test t) { 
     // code... 
    } 
} 

public void testWindow (Test window, String title) { 
    if (window != null) { 
     try { 
      window.zClose(window); 
     } catch (HarnessException e) { 
      e.printStackTrace(); 
     } 
     window = null; 
    } 
} 
+0

Davidさんに助けてくれてありがとう! –

関連する問題