Как предотвратить, прежде чем вызывать одну и ту же функцию на объекте в строке? - PullRequest
0 голосов
/ 23 октября 2019

Я хочу создать простой конструктор, в котором я могу передать функцию и получить результат, но я хочу иметь ограничения. Например, я создал:

class Compute {
    public Compute count(Function func){ ... }
    public Compute result() {...}
}

И теперь я могу назвать это так: compute.count(function).result(), но я не могу выяснить, как предотвратить, прежде чем делать это compute.count(function).count(function) после count Я мог только позвонить result() и не смог позвонить count. Также я хочу назвать это в этом стиле: compute.count(function).result().count(function).result(), но не хочу вызывать одни и те же методы подряд. Как решить эту проблему?

1 Ответ

0 голосов
/ 23 октября 2019

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

static class User {

    static WithName builder() {
        return name -> age -> new User(name, age);
    }

    private User(String name, int age) {
        // whatever you want here
    }
}

interface WithName {

    WithAge withName(String name);
}

interface WithAge {

    User withAge(int age);
}

И вызывающая сторона, которая выглядит следующим образом:

public static void main(String[] args) {
    User u = User.builder()
                 .withName("Bob")
                 .withAge(18);
}

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

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