Вывод типа для параметризованных типов в случае циклического сценария Builder - PullRequest
0 голосов
/ 20 октября 2018

Предполагается, что существует следующий класс java:

public class Test {
    static class Builder<B extends Builder<B>>{
        B asBuilder() {
            return (B) this;
        }
    }

    public static <B extends Builder<B>> B newBuilder() {
        return new Builder<B>().asBuilder();
    }
}

При попытке вызвать Test.newBuilder() в коде-потребителе Kotlin выдает ошибку Type expected.

Test.newBuilder<>() имеет ту же проблему.Test.newBuilder<Test.Builder>() выдает ошибку: One type argument expected for class Builder<B : Test.Builder<B!>!>.Поскольку аргумент типа является рекурсивным вызовом, это не может быть решено вышеуказанным способом.

Я считаю, что это довольно странное поведение даже с точки зрения Java.Странно, что код класса Test был даже разрешен в его текущей форме.К сожалению, вышеупомянутое было упрощенной версией другого класса, который я не могу контролировать.На самом деле я пытаюсь сделать

org.apache.logging.log4j.core.layout.GelfLayout.newBuilder()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...