java - 理解类的映射字段上的最终静态使用

标签 java encapsulation final static-members

我是一名 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,阅读:

What does the 'static' keyword do in a class?

关于java - 理解类的映射字段上的最终静态使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20766648/

相关文章:

Python 设计指南 :

php - 为什么 PHP 允许从其他实例调用私有(private)方法?

java - 你能写一个不能实现的接口(interface)吗?

c++ - 数据封装(网络编程)

java - 如何从匿名内部类访问非最终变量?

java - 你能用 C# 编写最终函数吗?

java - 获取 random.NextBoolean() 的结果并在进一步的 if 语句中使用它

java - JodaTime 中格式错误的时区

java - 具有覆盖最旧元素的有限容量的 FIFO 缓冲区

java - 将空 Jackson 节点反序列化到集合时遇到问题