gpt4 book ai didi

java - 从 kotlin 调用的第三方 java 库中的重载解析歧义

转载 作者:行者123 更新时间:2023-12-02 12:37:14 26 4
gpt4 key购买 nike

我在 Kotlin 中编写了一个使用库 https://github.com/KaptainWutax/SeedUtils 的小程序,特别是 Dimension 枚举 https://github.com/KaptainWutax/SeedUtils/blob/master/src/main/java/kaptainwutax/seedutils/mc/Dimension.java
当我打电话时,例如Dimension.OVERWORLD.name , 我得到 Overload resolution ambiguity .
我知道是什么问题,问题是enum Dimensionname字段,枚举类本身有 name字段 https://kotlinlang.org/docs/reference/enum-classes.html
问题是,我能做些什么。我目前的方法是 fork 这个库和我使用并依赖它的所有其他 4 个库,重命名 name在那个枚举中的其他东西,但我讨厌不得不 fork 5 个 repos 来重命名单个字段。
有没有其他方法可以解决这个问题?我可以以某种方式指定应该使用哪个名称吗?有没有办法通过告诉JVM做什么来消除这种歧义?
或者没有什么可做的,命名枚举字段name是使它无法被 Kotlin 使用的有效方法吗?

最佳答案

一种解决方法是在 Java 中编写一个辅助方法,它是明确的:

public class DimensionHelper {
public static String getName(Dimension dimension) {
return dimension.name;
}
}
然后在 Kotlin 中,您可以调用 DimensionHelper.getName()每当您想访问 Dimension 的名称时.然后,您可以在 Kotlin 中添加扩展方法:
fun Dimension.getName() = DimensionHelper.getName(this);
...这将允许您只使用 Dimension.OVERWORLD.getName() .
这远非理想,但确实避免了 fork 。
(当然,我完全不知道有一种特定于 Kotlin 的方式来执行此操作。)

关于java - 从 kotlin 调用的第三方 java 库中的重载解析歧义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63736339/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com