kotlin, как работает проверка обнуляемого логического значения? - PullRequest
0 голосов
/ 15 марта 2019

Имея класс Config с логическим значением nullable sAllowed и интерфейсную функцию, можно получить значение Config

interface IConfig {
    fun getConfig() : Config?
}

class Config (var sAllowed: Boolean?=null)

, которое можно обнулять, и когда вы хотите использовать этот логический код:

var sAllowed = false
// some loop ...
    val config = iConfig.getConfig()
    if (config != null) {
        sAllowed = sAllowed || config.sAllowed == true
    }

, ноconfig.sAllowed == true означает:

Intrinsics.areEqual(config.getsAllowed(), true);

, а Intrinsics.areEqual(config.getsAllowed(), true);:

public static boolean areEqual(Object first, Object second) {
    return first == null ? second == null : first.equals(second);
}

first.equals(second);:

public boolean equals(Object obj) {
    return (this == obj);
}

документ дляequals(Object obj) - это Indicates whether some other object is "equal to" this one, а не равенство значений.

Похоже, config.sAllowed == true проверяет равенство объектов, а не значение, или что я здесь упускаю?

     * The {@code equals} method for class {@code Object} implements
     * the most discriminating possible equivalence relation on objects;
     * that is, for any non-null reference values {@code x} and
     * {@code y}, this method returns {@code true} if and only
     * if {@code x} and {@code y} refer to the same object
     * ({@code x == y} has the value {@code true}).
     * <p>```

1 Ответ

1 голос
/ 15 марта 2019

Это проверка равенства объектов.Однако посмотрите на equals() из Boolean.java

public boolean equals(Object obj) {
        if (obj instanceof Boolean) {
            return value == ((Boolean)obj).booleanValue();
        }
        return false;
    }

Это учитывает значение, заключенное в класс Wrapper.

first.equals(second);

Будет вызывать equals в Boolean ине Object, поскольку first является Boolean.

...