約 12 個の else if があり、これらの if ステートメントのそれぞれが 2 つのオブジェクトの instanceof をチェックするので、次のようなものがあるため、本当にクリーンアップしたいこの厄介なコードがあります。
それぞれの if ステートメントは異なるものを実行するので、ポリモーフィズムによってそれが改善されることはないと思います。また、この小さな機能に対して 12 の異なるスーパー クラス (ほとんどの if ステートメントが 1 つのライナーを実行する) は少しばかげているためです。ポリモーフィズムが機能しないもう 1 つの理由は、親クラスまたはスーパー クラスにアクセスできないためです。多くの instanceof 条件は、一般的によくないことを知っていますが、その理由はよくわかりませんでした。各 if ステートメント内で実行されるメソッドは、親クラスのものではなく、スーパー クラスのものです。そのため、キャストしてそれらのメソッドを実行できるように、それらの型をチェックする必要があります。これをどのようにクリーンアップできるかについてのアイデアはありますか? ありがとう!
編集:詳細がなくてすみません、これは私の電話で書きました。とにかく、以下は私が扱っているものの例です。私は戦略パターンを見てきましたが、それに関する私の唯一の懸念は、同じ理由で、多くの異なるクラスを作成する必要があり、1 つのライナーを常に実行するためだけに多くの異なるオブジェクトを作成するのは少し無駄だと感じたことです。 . また、戦略の設計では、どの戦略を実行するかを知るために多くの instanceof チェックを行う必要があるように思えます。とにかく、以下はいくつかのコードです:p
if (plotBlockState instanceof Sign && UpgradeBlockState instanceof Sign) {
//do Sign Stuff
}
else if (plotBlockState instanceof Chest && UpgradeBlockState instanceof Chest) {
//do Chest Stuff
}
else if (plotBlockState instanceof Dispenser && UpgradeBlockState instanceof Dispenser) {
//do Dispenser Stuff
}
else if (plotBlockState instanceof Furnace && UpgradeBlockState instanceof Furnace) {
//do Furnace Stuff
}
else if (plotBlockState instanceof BrewingStand && UpgradeBlockState instanceof BrewingStand) {
//do Brew Stand Stuff
}
else if (plotBlockState instanceof Hopper && UpgradeBlockState instanceof Hopper) {
//do hopper Stuff
}
else if (plotBlockState instanceof Dropper && UpgradeBlockState instanceof Dropper) {
//do dropper Stuff
}
else if (plotBlockState instanceof Beacon && UpgradeBlockState instanceof Beacon) {
//do beacon Stuff
}
else if (plotBlockState instanceof CreatureSpawner && UpgradeBlockState instanceof CreatureSpawner) {
//do spawner Stuff
}
else if (plotBlockState instanceof NoteBlock && UpgradeBlockState instanceof NoteBlock) {
//do noteblock Stuff
}
else if (plotBlockState instanceof Jukebox && UpgradeBlockState instanceof Jukebox) {
//do jukebox Stuff
}
else if (plotBlockState instanceof Skull && UpgradeBlockState instanceof Skull) {
//do skull Stuff
}
else if (plotBlockState instanceof CommandBlock && UpgradeBlockState instanceof CommandBlock) {
//do commandblock Stuff
}