Kotlin: частная изменяемая собственность только с добытчиком - PullRequest
0 голосов
/ 29 августа 2018

Я очень новичок в Kotlin и пытаюсь перенести в него один проект с Java. Я немного запутался в свойствах Kotlin и методах получения / установки для них, а также в области видимости.

Чего я хочу добиться:

public class Foo {

    private int number;

    public int getNumber() {
        return number;
    }

    public void increment() {
        number++;
    }

}

Так что в основном мне нужно создать класс с частной собственностью number. Это свойство должно быть доступно общедоступному получателю, но оно не должно иметь установщика. Кроме того, это свойство должно быть внутренне изменяемым, чтобы его значение можно было изменить с помощью некоторого метода, например increment().

Насколько я понимаю, я не могу объявить его как val, потому что в этом случае он будет полностью неизменным, даже внутри экземпляра класса, поэтому я не могу увеличить его. Похоже, это должно быть var. Но тогда я не вижу возможности сделать само свойство равным private, а получатель для этого свойства - public, потому что кажется, что свойства и их получатели / установщики должны иметь одинаковую область видимости ...

Ответы [ 3 ]

0 голосов
/ 29 августа 2018

Я тоже новичок в kotlin, и похоже, что это делается так:

class Foo {
    var number: Int = 0; private set
    fun increment() {
       ++number;
    }
}

Как указано в их документации

0 голосов
/ 29 августа 2018

В Котлине ваш класс будет таким:

class Foo {
    var number = 0
        get
        private set

    fun increment() {
        number++
    }
}

Getter является общедоступным (но в любом случае он создается неявным образом, поэтому мы можем удалить его), а setter является приватным.

0 голосов
/ 29 августа 2018

Если вы используете Intellij, вы можете просто вставить свой код в класс Kotlin и получить следующее:

class Foo {

  var number: Int = 0
    private set

  fun increment() {
    number++
  }
}

И это, в принципе, и есть ответ на вашу проблему ...

private set говорит о том, что сеттер виден только лично. Таким образом, вы можете получить к нему доступ Foo, но не снаружи. 0 вы устанавливаете явно (в отличие от Java). Тогда: по умолчанию свойство и функции public.

Проверьте также ссылку Kotlin относительно свойств (в частности, геттер / сеттер)

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