我是一名 C++ 开发人员,正在努力熟悉核心 Java 概念。 我发现我的最终静态令人困惑是在构造对象后无法更改的东西。 (如果我错了请纠正我)
我遇到了下面的实现,我发现它令人困惑,因为即使它是最终静态的,它似乎也允许将值添加到 Map 中
public class MockUserServiceImpl implements UserService {
private static final Map<String, User> userMap = new HashMap<String, User>();
public static void addUserToCache(int userId, String userName) {
if (!userMap.containsKey(userName)) {
userMap.put(userName, new User(userId, userName));
}
}
}
谁能解释一下这里的 static final 到底是什么意思
最佳答案
不要将Map
视为一种数据结构。将其视为具有方法的任何其他类,例如 put(..)
。你是说如果你有
public class Foo {
public void bar() {}
}
你不应该在
上调用bar()
final Foo foo = new Foo();
仅仅因为它是final
?那它有什么用呢?
final
关键字只是防止一个变量被重新赋值,而不是可以调用什么方法或者可以访问什么字段。 It has a different meaning when used on on methods and classes.
关于static
,阅读:
关于java - 理解类的映射字段上的最终静态使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20766648/