Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 方法中的代码总是被执行吗?_Java - Fatal编程技术网

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是的,如果您不必在子类中重写它,这是一个替代方法。