Java 方法中的代码总是被执行吗?
我已经创建了一个超类的抽象方法的实现。方法中的代码是否总是被执行,或者是否有某种缓存知道代码永远不会更改 我想知道我的代码是否存在性能问题。是否最好将映射创建为成员变量,然后在方法中返回它Java 方法中的代码总是被执行吗?,java,Java,我已经创建了一个超类的抽象方法的实现。方法中的代码是否总是被执行,或者是否有某种缓存知道代码永远不会更改 我想知道我的代码是否存在性能问题。是否最好将映射创建为成员变量,然后在方法中返回它 @Override protected Map<String, Function<Information, String>> getDefinitionMap() { final Map<String, Function<Information, String>
@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;
}
@覆盖
受保护的映射getDefinitionMap(){
最终映射=新LinkedHashMap();
map.put(“Name”,t->t.getName());
map.put(“ID”,t->t.getId());
返回图;
}
每次调用方法getDefinitionMap()
时,都会创建一个新的LinkedHashMap
实例。没有“隐式缓存”
可以避免这种情况,如果只创建一次映射,请将其存储在成员变量中并返回此值。您可能希望使其不可修改,以便调用者无法更改。(请参见
java.util.Collections.unmodifiableMap
)不确定您在问什么;如果要防止子类重写代码,则必须将函数声明为final
。我仅在方法为final时更新了问题,然后有时编译器可以将该final方法的字节码复制到与调用方法的编译代码直接内联的子例程中。这样就消除了一遍又一遍地编译方法代码的麻烦。对这个问题的一些评论:第一,这不是一个“抽象方法”,第二,即使代码没有改变(顺便说一句,它从来没有改变),计算结果通常也会改变。对不起,我的意思是它实际上是一个抽象方法的实现,这就是我要为之创建一个公共最终静态
。@daniu是的,如果您不必在子类中重写它,这是一个替代方法。