2017-12-06 2 views
3

スーパークラスの抽象メソッドの実装を作成しました。メソッド内のコードは常に実行されるか、コードが決して変更されないことを知っている何らかのキャッシュがありますか?メソッド内のコードは常に実行されますか?

私のコードにパフォーマンスの問題があるかどうかを知りたいのですが。メンバー変数としてマップを作成し、それをメソッドに戻す方が良いでしょうか?

@Override 
protected Map<String, Function<Information, String>> getDefinitionMap() { 
    final Map<String, Function<Information, String>> map = new LinkedHashMap<>(); 
    map.put("Name", t -> t.getName()); 
    map.put("ID", t -> t.getId()); 
    return map; 
} 
+0

あなたが何を求めているのかよく分かりません。サブクラスがコードを上書きしないようにするには、関数を 'final'として宣言する必要があります。 – daniu

+0

私は質問 – user489872

+0

を更新しましたあなたのメソッドが最終的な場合のみ、コンパイラは呼び出しメソッドのコンパイルされたコードと直接インラインでサブルーチンの最終メソッドのバイトコードをコピーできます。したがって、メソッドコードのコンパイルの頭痛を何度も取り除きます。 –

答えて

4

方法getDefinitionMap()が呼ばれるたびに、新しいLinkedHashMapインスタンスが作成されます。 「暗黙のキャッシング」はありません。

マップを一度作成した場合、それをメンバー変数に格納して戻すことは避けることができます。発信者が変更できないように変更できないようにすることができます。 (java.util.Collections.unmodifiableMapを参照してください)

+0

実際、これは 'public final static'を作成するようなものです。 – daniu

+0

@daniuはい、これはサブクラスでオーバーライドする必要がない場合の代替方法です。 – Henry

関連する問題