ある方法でif/elseステートメントがたくさんあるメソッドを見ると、私の目には滲みが出ます。 そして何とか修正したいと思います。 方法は次の通りである:多くのif/elseをJavaで返す方法を変更するには
private Class getMapType(String header) {
if (header.equals(Bean01.getHeader())) {
return Bean01.class;
} else if (header.equals(Bean02.getHeader())) {
return Bean02.class;
} else if (header.equals(Bean03.getHeader())) {
return Bean03.class;
} else if (header.equals(Bean04.getHeader())) {
return Bean04.class;
} else
logger.log(Logger.FATAL, "File does not exist");
return null;
}
getHeader()
方法は、各クラスごとに異なります。
どうすれば再作成できますか?あなたが(それは完全修飾でなければなりません)forName
メソッドでクラス名を変更する必要が
private Class getMapType(String header) {
for (int i = 1; i <= 4; i++)
if (header.equals(Class.forName("com.mycompany.Bean0"+i).getMethod("getHeader").invoke(null)))
return Class.forName("com.mycompany.Bean0"+i);
logger.log(Logger.FATAL, "File does not exist");
return null;
}
:
'Bean01.getHeader()'は常に同じ 'String'を返しますか、それとも変化しますか?他のクラスと同様に?ヘッダーが変更されない場合は、 'Map>'を設定し、ヘッダーを調べることができます。 –
スイッチケースを使用することができます – Amit1011
strがすべてのクラス(Bean01 .. Bean04)を反復処理してからリフレクションを使用してgetHeader関数を呼び出すときに、Class.forName(str)を使用できます – ronhash