Проблемы стиля Java-кода в JDK, такие как if ((t = table)! = null) - PullRequest
0 голосов
/ 03 июля 2019

Я сталкиваюсь с проблемой, которая всегда смущала меня при проверке исходного кода в JDK.Ниже приведен фрагмент кода из ConcurrentHashMap.Почему бы не использовать table varible напрямую?а скорее, чтобы назначить его на t локальную переменную.это рекомендуемый стиль в Java?

public boolean containsValue(Object value) {
        if (value == null)
            throw new NullPointerException();
        Node<K,V>[] t;
        if ((**t** = **table**) != null) {
            Traverser<K,V> it = new Traverser<K,V>(**t**, **t**.length, 0, t.length);
            for (Node<K,V> p; (p = it.advance()) != null; ) {
                V v;
                if ((v = p.val) == value || (v != null && value.equals(v)))
                    return true;
            }
        }
        return false;
    }

1 Ответ

2 голосов
/ 03 июля 2019

Если вы работаете с несколькими потоками, тогда table может быть изменен другим потоком и станет пустым во время выполнения метода. Но t нельзя изменить в другом месте, потому что он существует только внутри этого метода. Это способ избежать возможного исключения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...