【发布时间】:2018-04-30 11:56:03
【问题描述】:
请问有什么问题可以解释一下吗?
我尝试从 HashMap 中按键获取一个项目:
如果我这样做:
var stringProvider = providersHolder[String]
我收到一个错误:
NoSuchMethodError:“模块”类没有实例获取器“字符串”。
如果我用下一个方法:
var stringProvider = providersHolder[providersHolder.keys.last]
其中providersHolder.keys.last == String
我成功了。
这是一个完整的列表:
class Module {
HashMap providersHolder = new HashMap<Type, ItemCreator>();
void addProvider<T, M extends Module>(ItemCreator<T, M> itemCreator) {
providersHolder[T] = itemCreator;
}
}
class Test {
Test() {
var module = Module();
module.addProvider((module) => new Ticker());
module.addProvider((module) => "hello");
var ticketProvider = module.providersHolder[Ticker]; //success
var stringProvider = module.providersHolder[String]; //error
}
}
这是一个观察者:
【问题讨论】:
-
您能否提供更多详细信息?你的代码对我有用。我将 ItemCreator 定义为
typedef T ItemCreator<T, M>(Module);,这可能与您的不同。这是调试器错误吗? -
@RichardHeap,感谢您详细研究此事,甚至运行代码。到目前为止,我只能在调试器中重现它。所以,我猜你认为这是调试器问题的假设是正确的。