以下声明在Kotlin中是合法的.
fun foo(): String = "foo_1"
fun <T> foo(): T = "foo_2" as T
Run Code Online (Sandbox Code Playgroud)
作为字节码我们得到:
public final static foo()Ljava/lang/String;
// signature <T:Ljava/lang/Object;>()TT;
// declaration: T foo<T>()
public final static foo()Ljava/lang/Object;
Run Code Online (Sandbox Code Playgroud)
也可以从Kotlin调用这两种方法.
当我试图从Java中调用其中任何一个时,问题出现了:
ClassKt.foo()
Run Code Online (Sandbox Code Playgroud)
暧昧的电话.两种方法都匹配......
如何避免这样的问题?如何处理这样的方法?如果第三方kt库有同样的问题怎么办?
上面的例子是合成的例子.
我正在尝试找到提供已弃用参数的替代品的最佳方法。
A拥有一个带有已弃用元素的枚举类X
enum class A {
@Derecated
X,
Y,
Z
}
Run Code Online (Sandbox Code Playgroud)
我希望 IDE 在我的代码中建议快速修复替换X。为了支持它,我可以提供一个replaceWith值。但是,不可能提供多项选择选项。
X可以替换为Y或Z。
enum class A {
@Derecated(
message = "...",
replaceWith = ReplaceWith("Y or Z"),
DeprecationLevel.WARNING,
)
X,
Y,
Z
}
Run Code Online (Sandbox Code Playgroud)
使用ReplaceWith("Y or Z")IDE 可以建议快速修复,但它会破坏编译:
// works, but breaks compilation
A.X -> A.Y or Z
Run Code Online (Sandbox Code Playgroud) 我有map这样的
Map<String, Map<String, List<String>>> m;
Run Code Online (Sandbox Code Playgroud)
我想遍历列表
我的逻辑是这样的:
for (Map m:m.keyset()){
for (Map m1:m.getKey(){
List<String> l = m1.getKey(){
for (String s:l){
}
}
}
Run Code Online (Sandbox Code Playgroud)
这样对吗?
我很困惑测试它...请帮助我...:)
我有一个简单的应用程序,其中有几个用 kotlin beans dsl 声明的 bean:
@SpringBootApplication
class App
val beans = beans {
bean<A>()
}
fun main(args: Array<String>) {
runApplication<MatchmakerApp>(*args) {
addInitializers(beans)
}
}
@RestController
class AppController(val a: A) {
// some code
}
class A
Run Code Online (Sandbox Code Playgroud)
我有一个集成测试:
@RunWith(SpringRunner::class)
@SpringBootTest
class AppControllerTest {
@Test
fun dummyTest() {
assert(true)
}
}
Run Code Online (Sandbox Code Playgroud)
启动这个测试我得到
UnsatisfiedDependencyException: Error creating bean with name appController
Caused by: NoSuchBeanDefinitionException: No qualifying bean of type 'A' available:`
Run Code Online (Sandbox Code Playgroud)
似乎在SpringBootTest创建上下文期间未调用 bean 初始值设定项。
我们需要在 SpringBootTest 中添加 kotlin bean dsl 初始值设定项吗? …