私は同じクラスのインスタンスを2つ持っていますが、構築時に設定された最後のブール値フィールドに基づいて、異なるコードパスを使用して異なる動作をします。そう、何かのように:flag
に異なる値を持つFoo
のJVMは、同じクラスの異なるインスタンスを異なる方法で最適化できますか?
public class Foo {
private final boolean flag;
public Foo(boolean flagValue) {
this.flag = flagValue;
}
public void f() {
if (flag) {
doSomething();
} else {
doSomethingElse();
}
}
}
2のインスタンスは、理論的には、それによって、私はできれば(不自然な例のために申し訳ありませんが、その最も簡単な1のコストを排除し、2つの異なるアセンブリによってバックアップされる可能性が一緒に出てくる)。
私の質問です - どのJVMが実際にこれを行うのですか?または単一のアセンブリで常にサポートされている単一のクラスですか?
あなたが説明していることは、サブクラス化に非常によく似ていると思われますが、それがうまくいかない理由を明確にすることはできますか?私は問題の境界を理解しようとするだけでは挑戦的ではありません。 – Taylor
すべてのインスタンスが同じコードを共有します。あなたの質問は理にかなっていません。 – EJP
@テイラー私はOPを解釈することを敢えてすればすみませますが、彼/彼女が求めているのは適切なパターン(明らかに継承)ではないと思いますが、JVMが " 'flag'変数を使用して、クラス全体の2つの異なるバイトコードを生成します(1つは' true'ブランチに対応し、もう1つは 'false'ブランチに対応します)。 –