我可以使用异步映射功能映射一些Iterable吗?也许这是一个错误,该代码会隐式打印_Future列表,而不是在1或5秒后显示整数吗?
import 'dart:async';
Future<int> foo(int i) {
var c = new Completer();
new Timer(new Duration(seconds: 1), () => c.complete(i));
return c.future;
}
main() {
var list = [1,2,3,4,5];
var mappedList = list.map((i) async => await foo(i));
print(mappedList);
}
Run Code Online (Sandbox Code Playgroud) 假设,我们有switch语句,它完全涵盖了enum参数的所有可能情况,并且也有null检查,不会被编译的原因"Missing return statement".
enum Foo {ONE,TWO}
int fooToInt(Foo foo) {
if (foo == null) {
throw new NullPointerException();
}
switch (foo) {
case ONE: return 1;
case TWO: return 2;
}
}
Run Code Online (Sandbox Code Playgroud)
我知道,从defaultcase或enum之后抛出异常,或访问枚举元素而不是switch将解决问题.但我不明白这种行为的技术原因:显然,没有可能的执行分支,这不会导致return或throw.在某些情况下,编译时检查是否涵盖所有案例都会很棒.
我有一个带有一些独立bean X的项目,它在一堆服务中自动装配.服务彼此使用,最后用于单入口点(控制器).现在有了新的要求:实现X的几个版本,并根据入口点的参数(枚举XType)决定使用一个版本.如果不改变服务就可以做到这一点.
我的解决方案是创建自定义范围UsesX和实现BeanFactoryPostProcessor,它将BeanDefinition使用UsesX 将每个范围转换为每个XType的单例集.此外,它还会为此bean添加限定符,以便在控制器中为X和基于参数的选择创建工厂方法.但是如何@Autowired隐式地在服务中添加这个限定符,而不更改它们的类?
UPD
好的,例如,我想"jdbc:mysql://Adb"在A请求"jdbc:mysql://Bdb"时使用db url ,以及何时B:
enum DatabaseType {A, B}
@Controller
@RequestMapping(/)
class MyController {
@Autowired ServiceProvider provider; // some way to get service by DatabaseType
void foo(@RequestParam DatabaseType dbType) {
ServiceA a = provider.getA(dbType);
a.bar();
ServiceB b = provider.getB(dbType);
b.baz();
}
}
@Service
class ServiceA {
// Don't want to get information about different databases in services
@Autowired ServiceB b;
@Autowired ServiceC c; …Run Code Online (Sandbox Code Playgroud) 我正在尝试org.springframework.data.mongodb.core.query.Update#set从Kotlin代码调用Java方法。此方法声明为
public Update set(String key, Object value)
Run Code Online (Sandbox Code Playgroud)
没有关于参数可空性的其他注释或注释。事实上,它只是把value成HashMap,所以有效地value可能null。
但是,Kotlin编译器将value类型视为Any(而不是期望的Any!)类型,并且在null与
Null can not be a value of a non-null type Any
Run Code Online (Sandbox Code Playgroud)
有!!明显原因导致传递可空值KotlinNullPointerException,as Any抛出异常TypeCastException。
这种可空性推断背后的逻辑是什么?通过null反射传递参数实际上效果很好,但是还有更自然的解决方案吗?