考虑以下Java类:
public final class Example {
private int value;
public int getExampleValue {
return value;
}
public void setExampleValue(int value) {
this.value = value;
}
}
Kotlin将这些get/set访问器方法合成为属性:
val example = Example()
example.exampleValue = 0 // setExampleVa
自从我从Java转到Kotlin之后,我不得不重写我的文档。Kotlin有自己的文档格式,或者根据我的看法,它扩展了普通的javadocs。我检查了,它声明有一个property标记,它允许您记录类属性。
如果我有这样的kdoc:
/**
* Tablemodel for the Players of a server, only holds two properties:
*
* * Name
* * Score
*
* @author marcel
* @since Jan 10, 2018
* @property playerName Ingame name of t
假设我有这样的界面:
interface Things {
fun size(): Int
}
我想子类一个List并实现这个接口。
class Cars : ArrayList<String>, Things {}
我得到一个编译错误:
继承的平台声明冲突:以下声明具有相同的JVM签名(size()I):兴趣():Int被定义为
我可以通过将size合同更改为var隐式getter来避免编译错误:
interface Things {
var size: Int
}
但是,我得到了一个长而复杂的错误,它看起来像是运行时错误(IllegalStateExcept
在编写同时使用Java和Kotlin的反射代码时,开发人员应该注意哪些注意事项?
例如,我有一个使用反射的现有库,它可以很好地使用Java。但是,当我在Kotlin中使用相同的代码时,我的反射代码似乎没有获取字段上的注释。
以下是我注意到的一些不同之处。
1.获取类实例
// Example 1.1 - Java
Class<?> userClass = User.class; // From a class name
userClass = userInstance.getClass(); // OR from an instance
在Kotlin中获取
好的,我已经开始学习kotlin一个星期了,我喜欢这种语言:p除了扩展函数的巨大效用之外,我觉得它们缺乏创建命名空间的适当方法,比如java实用程序类(xxxUtil)。
我最近开始使用这个程序,我不确定它是正确的,我想从Kotlin有经验的用户那里得到一些反馈。
这是一件有效和恰当的事情吗:
object RealmDb {
private val realmInstance by lazy{ Realm.getInstance(MainApplication.instance) }
private fun wrapInTransaction(code:() -> Un
我在一个Android项目中和java一起编写Kotlin,我有一个抽象的Java BaseApplication类,它有一些静态方法,我的每种风格的应用程序类扩展了这个BaseApplication类(称为App.kt),并且是用Kotlin编写的。我想知道为什么我不能在Kotlin代码中通过应用程序类访问BaseApplication静态函数
public abstract class BaseApplication extends Application {
public static void staticFunction(){
Log.d("TAG
我试图将工作的示例从翻译成Kotlin,但是存在一些类型推断问题,阻碍了我的编译。
到目前为止:
使用sakila模式
从jOOQ代码生成步骤生成Kotlin
将Java的CompletionStage应用于Kotlin与async() kotlinx.coroutines.jdk-8的协同例程
data class Actor(val firstName: String?, val lastName: String?)
data class Film(val title: String?, val actors: List<Actor>, v
我在我的代码库中同时使用了Kotlin和java。但是我想知道是否有一种方法可以从java引用kotlin函数?这是我的kotlin代码: MyEvent.kt
open class MyEvent {
@Inject
lateinit var myService: MyService
@Inject
lateinit var app: MyApp
var name: String = ""
var options: MutableMap<String, String> = hashMapOf()
var
我的设置有问题,但我不知道是什么。从,我有以下信息。
no编译器插件为具有特定注释的类生成一个额外的零参数构造函数。
生成的构造函数是合成的,因此不能直接从Java或Kotlin调用,但可以使用反射调用它。
也就是说,我认为我可以通过java和kotlin反射访问noarg构造函数,但我只能通过java反射访问它。这是我想要的行为,还是我做错了什么?
build.gradle
plugins {
id 'org.jetbrains.kotlin.jvm' version '1.3.50'
id "org.jetbrains.kot
我试图从Kotlin文件中调用一个非静态的Java方法,因为我需要能够使用findViewById。但是,当我将方法更改为非静态时,Kotlin文件返回了以下错误:未解析引用: main。当Java方法是静态的时,Kotlin文件能够运行Java方法。
Kotlin文件:
class RoundFactoryImpl(private val randomiser: Randomiser) : RoundFactory {
override fun buildRound(cards: List<Card>): Round = Round()
val card
我正在学习Kotlin,目前使用Fedora 25 OpenJDK 8和Kotlin 1.1。
我从Kotlin网站复制了这个示例:,并更改了get操作符。
class Example {
var p: String by Delegate()
}
class Delegate {
operator fun getValue(thisRef: Any?, property: KProperty<*>): String {
// My implementation
return property.getter.call(thisRef) as
我正在Android应用程序中创建我的第一个Kotlin类。通常,出于日志记录的目的,我有一个名为TAG的常量。我在Java中要做的是: private static final String TAG = MyClass.class.getSimpleName(); 我知道在Kotlin类中,我可以使用以下方式创建TAG: private val TAG = MyClass::class.java.simpleName 这对于使用Java和Kotlin的项目来说是可以的,但是如果我启动一个只使用Kotlin的新项目呢?如何定义TAG常量?有没有更多的Kotlin方法,我没有这个奇怪的结构cl
我们有两个项目,kotlin项目发布了一个由java导入的包。
在kotlin中,是一个值类,如
@JvmInline
value class CountryId(private val id: UUID) {
override fun toString(): String = id.toString()
companion object { fun empty(): CountryId = CountryId(EMPTY_UUID) }
}
在java中,我们看不到构造函数,或者实例化这个类。我还尝试在Kotlin创建一个工厂来创建它们
class IdentifierFac
java.lang.StackOverflowError
at kotlin.jvm.internal.Intrinsics.areEqual(Intrinsics.java:164)
at plugin.interaction.inter.teleports.Category.equals(Category.kt)
at kotlin.jvm.internal.Intrinsics.areEqual(Intrinsics.java:164)
at plugin.interaction.inter.teleports.Destination.equals(Des
在使用Java、Kotlin时,对这种情况有一些建议或答案。
Java实现
public interface IIdentified<ID> {
ID getId();
}
public class SomeEntity implements IIdentified<Long> {
private Long id;
//Some code....
@Override
public Long getId() {
return id;
}
}
我的皈依尝试。接口使用Java,类在Kotlin。我从In
我想以一种对Kotlin调用者有用的方式扩展API,而不是Java调用者。因此,我希望鼓励Kotlin用户切换到一种新的方法,而不是困扰Java用户。我们有一个混合了Java和Kotlin的大型代码库,短期内不会是100%的Kotlin。
有没有办法添加一个@Deprecate标签或类似的标签,只在Kotlin中出现,而不是Java?
如果您对特定细节感兴趣,我们有一个接受格式化字符串的Log接口,如下所示:
Log.get().info("Log message with some $expensive $things to $format")
即使禁用了日志记录,也会在每次
我在Java库中声明了以下方法:
Engine.java:
public <T extends EntitySystem> T getSystem(Class<T> systemType)
Entity.java:
public <T extends Component> T getComponent(Class<T> componentClass)
现在,我经常使用这些方法,我非常希望使用MyComponent::class (即kotlin反射),而不是到处使用更冗长的javaClass<MyComponent>()。
我的Ent
如何正确地处理从带字段的Java类到Kotlin的迁移?
读一下Kotlin的文档就会发现,它们的类中不能定义字段。作为我的叛逆者,实际上试图将我现有的Java代码转换为Kotlin代码(使用Android的Java转换器功能)也用标记“字段”。
这是我的Java类:
public final class PaperDay implements Day {
private Date date;
private Weather weather;
PaperDay() {
// Obligatory empty ctor for Paper.
}
刚刚开始试验Kotlin (1.2.60) & Java (EE8)。所有这些都在EAR文件中成功地部署到JBoss WildFly 13.0.0中。最后使用Java 8和EJB3.2完成了部署。日志中没有显示异常。
我创建了一个Kotlin EJB:
@Stateless
@LocalBean
open class NOTiFYEJB {
open val logger = LoggerFactory.getLogger("NOTiFYEJB")
open fun sayHelloKotlinWorld() = {
logger.i