小编Ser*_*kin的帖子

Kotlin方法重载

以下声明在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库有同样的问题怎么办?

上面的例子是合成的例子.

java overloading java-interop kotlin

7
推荐指数
1
解决办法
3325
查看次数

科特林。弃用多项选择

在 Kotlin 中提供多项选择弃用的最佳选择是什么?

我正在尝试找到提供已弃用参数的替代品的最佳方法。

A拥有一个带有已弃用元素的枚举类X

enum class A {
  @Derecated
  X,
  Y,
  Z
}
Run Code Online (Sandbox Code Playgroud)

我希望 IDE 在我的代码中建议快速修复替换X。为了支持它,我可以提供一个replaceWith值。但是,不可能提供多项选择选项。

X可以替换为YZ

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)

deprecated kotlin

6
推荐指数
0
解决办法
459
查看次数

遍历列表映射的映射

我有map这样的

Map<String, Map<String, List<String>>> m;
Run Code Online (Sandbox Code Playgroud)

我想遍历列表

我的逻辑是这样的:

  1. 首先我得到了第一张地图的钥匙
  2. 并获得secondmap的键
  3. 从那个键我迭代列表。


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)

这样对吗?

我很困惑测试它...请帮助我...:)

java collections

3
推荐指数
1
解决办法
7534
查看次数

如何在 SpringBootTest 中使用 Kotlin beans dsl 初始值设定项

我有一个简单的应用程序,其中有几个用 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 初始值设定项吗? …

kotlin spring-boot spring-boot-test

2
推荐指数
1
解决办法
1439
查看次数