参数类型 'String' 无法分配给参数类型 'String'

The argument type 'String' can't be assigned to the parameter type 'String'

我在下面的代码中收到错误“参数类型 'String' 无法分配给参数类型 'String'”:

import 'dart:async';

abstract class SettingsBase {
  Future<String> getSetting<String>(String key);
  Future saveSetting<String>(String key, String value);
}

class InMemorySetting extends SettingsBase {
  final settings = <String, String>{};

  @override
  Future<String> getSetting<String>(String key) {
    if (settings.containsKey(key)) {
      return Future.value(settings[key] as String);
    }

    if (key == "theme") {
      return Future.value("light" as String);
    }

    throw UnimplementedError();
  }

  @override
  Future saveSetting<String>(String key, String value) {
    settings.putIfAbsent(key, () => value);
    return Future.value(true);
  }
}

我错过了什么?

阅读一下 generic 是什么。

我不确定为什么,但您在摘要 class 中为函数原型添加了一个泛型,名称为 String。所以 keyvalue 参数的类型是泛型类型,只是带有占位符名称 String.

删除那些泛型:

import 'dart:async';

abstract class SettingsBase {
  Future<String> getSetting(String key);
  Future saveSetting(String key, String value);
}

class InMemorySetting extends SettingsBase {
  final settings = <String, String>{};

  @override
  Future<String> getSetting(String key) {
    if (settings.containsKey(key)) {
      return Future.value(settings[key] as String);
    }

    if (key == "theme") {
      return Future.value("light" as String);
    }

    throw UnimplementedError();
  }

  @override
  Future saveSetting(String key, String value) {
    settings.putIfAbsent(key, () => value);
    return Future.value(true);
  }
}

事实证明,我向该方法添加了一个名为 String 的额外泛型类型参数。下面的代码有效。

import 'dart:async';

abstract class SettingsBase {
  Future<String> getSetting<String>(String key);
  Future saveSetting(String key, String value);
}

class InMemorySetting extends SettingsBase {
  final settings = <String, String>{};

  @override
  Future<String> getSetting<String>(String key) {
    if (settings.containsKey(key)) {
      return Future.value(settings[key] as String);
    }

    if (key == "theme") {
      return Future.value("light" as String);
    }

    throw UnimplementedError();
  }

  @override
  Future saveSetting(String key, String value) {
    settings.putIfAbsent(key, () => value);
    return Future.value(true);
  }
}

您正在使用覆盖 Dart 字符串类型的泛型字符串。

只需删除

中多余的字符串
getSetting<String>