ERROR DART: имя 'x' не является типом, поэтому его нельзя использовать в качестве аргумента типа - PullRequest
0 голосов
/ 28 апреля 2020

Ошибка в входной части в одном классе и в выходном в другом классе

  1. Это будет основной ссылочный класс
abstract class HttpFunction<Input, Output>
{
  Output apply(Input paramInput);
}
Это будет класс, в котором предыдущий называется
class ComposerFunction with HttpFunction<Input, Request>
{
    RequestComposer<Input> inputConverter;

    ComposerFunction(RequestComposer inputConverter);

    ComposerFunction_(RequestComposer<Input> inputConverter)
    {
        this.inputConverter = inputConverter;
    }

    Request apply(Input input)
    {
        return this.inputConverter.compose(input);
    }
}

class InterpreterFunction with HttpFunction<Response, Output> 
{
    ResponseInterpreter<Output> responseInterpreter;

    InterpreterFunction(ResponseInterpreter outputConverter);

    InterpreterFunction_(ResponseInterpreter<Output> responseInterpreter)
    {
        this.responseInterpreter = responseInterpreter;
    }

    Output apply(Response response)
    {
        return this.responseInterpreter.interpret(response);
    }
}
Это ошибки
The name 'Input' isn't a type so it can't be used as a type argument.
Try correcting the name to an existing type, or defining a type named 'Input'.dart(non_type_as_type_argument)

И

The name 'Output' isn't a type so it can't be used as a type argument.
Try correcting the name to an existing type, or defining a type named 'Output'.dart(non_type_as_type_argument)

ОБНОВЛЕНИЕ

class ComposerFunction<Input> implements HttpFunction<Input, Request>
{
    ...
}

class InterpreterFunction<Output> implements HttpFunction<Response, Output>
{
   ...
}

Спасибо за ваши ответы :)

Ответы [ 2 ]

0 голосов
/ 28 апреля 2020

У вас есть:

class ComposerFunction with HttpFunction<Input, Request>
{
   ...
}

Предполагая, что вы хотите, чтобы ComposerFunction был обобщенным c классом, который можно параметризовать для указанных вызывающим типами Input и Request, у вас нет объявил ComposerFunction родовым c классом. Хотя HttpFunction является обобщенным c классом, ComposerFunction как написано является non -generi c классом, который использует HttpFunction, специализированный для типов с буквальным именем Input и Request. Если у вас нет классов с именами Input и Request, это приведет к ошибке:

Имя 'Input' не является типом, поэтому его нельзя использовать как тип. аргумент.

, чтобы сделать ComposerFunction обобщенным c классом, вам нужно добавить параметры типа в it :

class ComposerFunction<Input, Request> with HttpFunction<Input, Request>
{
   ...
}

То же самое относится до InterpreterFunction.

Кроме того, with обычно предназначен для использования с mixin с . Также допускается использование abstract class для обратной совместимости с Dart 2.0 и более ранними версиями, но поскольку HttpFunction не предоставляет никакого кода, который можно использовать повторно, это не кажется полезным. Если вы хотите, чтобы ComposerFunctionInterpreterFunction) соответствовали интерфейсу, вместо этого вы обычно используете implements.

0 голосов
/ 28 апреля 2020

Если вам нужны именно общие типы, попробуйте изменить свой абстрактный класс, как показано ниже:

abstract class HttpFunction<T, U>
{
  U apply<T, U>(T paramInput);
}

И классы следующим образом:

class ComposerFunction with HttpFunction<Input, Request>
{
    RequestComposer<Input> inputConverter;

    ComposerFunction(RequestComposer inputConverter);

    ComposerFunction_(RequestComposer<Input> inputConverter)
    {
        this.inputConverter = inputConverter;
    }

    Request apply<Input, Request>(Input input)
    {
        return this.inputConverter.compose(input);
    }
}
class InterpreterFunction with HttpFunction<Response, Output>
{
    ResponseInterpreter<Output> responseInterpreter;

    InterpreterFunction(ResponseInterpreter outputConverter);

    InterpreterFunction_(ResponseInterpreter<Output> responseInterpreter)
    {
        this.responseInterpreter = responseInterpreter;
    }

    Output apply<Response, Output>(Response response)
    {
        return this.responseInterpreter.interpret(response);
    }
}

Это предполагает у вас есть классы, созданные / на которые имеются ссылки ожидаемых типов

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