参数类型 '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
。所以 key
和 value
参数的类型是泛型类型,只是带有占位符名称 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>
我在下面的代码中收到错误“参数类型 '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
。所以 key
和 value
参数的类型是泛型类型,只是带有占位符名称 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>