, если вы хотите создать какой-то код котельной пластины, вот типобезопасный способ добиться того, чего вы хотите (это всего лишь пример, вы можете настроить его так, как хотите):
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);
}
Как только вы протестируете это, вы увидите, что методы могут быть вызваны только в определенном порядке.