java中使用kotlin
最近,我一直在阅读有关不同语言的信息,以及它们可以为已经拥挤的软件开发人员带来什么,并且一种语言对我来说很突出:Kotlin。 ( https://kotlinlang.org/ )
这是一种相对较新的语言(成立于2011年),而这些正是我选择其他众多成熟语言所用的几个原因:
- 在JVM上运行并具有完全的Java互操作性
- 它既不是纯OO也不是功能语言,它自然地适应了两种样式
- 它使用功能支持程序编程
- 它具有类型推断功能,并且支持可空和不可空数据类型
- 它的语法很漂亮,尤其是Pascal样式的变量声明(数据类型在变量之后)
- 非常简洁,我发现用Kotlin编写的代码可读性强
设置项目
我将按照Wiki( https://github.com/libgdx/libgdx/wiki/Project-Setup-Gradle )中的建议和描述使用标准libGdx设置,其中Gradle作为构建工具,而IntelliJ作为IDE。
我将我的项目称为Nemo ,因为它没有名称,这就是拉丁语中的“ nemo” (没有,没有人,没有人,没有名字)。 我们将看到与它一起去的地方。
创建项目后,将其导入到IDE中。 通常从根项目根目录导入/打开build.gradle
文件。
导入项目后,升级libGdx。 最新的安装工具包含最新版本,但要手动执行,请打开定义所有依赖项的root build.gradle
文件,并使用最新版本的libGdx。 最新版本可以在这里找到:https://libgdx.badlogicgames.com/versions.html
将gdxVersion更改为最新版本,当前为1.8.0。
还要确保您的IDE已准备好用于Kotlin。
要设置IntelliJ,请按照此处的说明进行操作: https : //kotlinlang.org/docs/tutorials/getting-started.html
注意:要将插件升级到Kotlin的最新版本,我设法做到的唯一方法是卸载插件并重新添加。
对于eclipse用户,说明在这里: https : //kotlinlang.org/docs/tutorials/getting-started-eclipse.html
因为我们将Gradle用作构建工具,所以我们需要对其进行配置以使用kotlin插件来构建项目。 要做到这一点, kotlin-gradle
插件的依赖需要被添加到buildscript
主找到方法build.gralde
文件。
添加行
classpath 'org.jetbrains.kotlin:kotlin-gradle-plugin:1.0.0-beta-4584'
到主build.gradle
文件中的buildscript
依赖build.gradle
。
根build.gradle
文件应包含以下内容
buildscript {repositories {mavenCentral()maven { url "https://oss.sonatype.org/content/repositories/snapshots/" }}dependencies {classpath 'com.android.tools.build:gradle:1.2.3'classpath 'org.robovm:robovm-gradle-plugin:1.12.0'classpath 'org.jetbrains.kotlin:kotlin-gradle-plugin:1.0.0-beta-4584'}
}
可以从位于Maven Central的Kotlin的存储库中获取版本号。 http://mvnrepository.com/artifact/org.jetbrains.kotlin/kotlin-gradle-plugin
有关如何将Kotlin与Gradle结合使用的更多信息,请参见: https : //kotlinlang.org/docs/reference/using-gradle.html
为了定位JVM,需要应用Kotlin插件。
加
apply plugin: "kotlin"
到“ 核心 ”项目,因为我们将仅在“ 核心 ”中使用Kotlin。 还需要将Kotlin标准库添加到核心依赖项中。
compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlinVersion"
注意: kotlinVersion
在allProjects.ext
的项目级别定义。
allprojects {apply plugin: "eclipse"apply plugin: "idea"version = '1.0'ext {appName = "nemo"gdxVersion = '1.8.0'roboVMVersion = '1.12.0'box2DLightsVersion = '1.4'ashleyVersion = '1.7.0'aiVersion = '1.7.0'kotlinVersion = '1.0.0-beta-4584'}repositories {mavenCentral()maven { url "https://oss.sonatype.org/content/repositories/snapshots/" }maven { url "https://oss.sonatype.org/content/repositories/releases/" }}
}
有关最新版本,请访问Kotlin网站。
核心项目设置应如下所示:
project(":core") {apply plugin: "java"apply plugin: "kotlin"dependencies {compile "com.badlogicgames.gdx:gdx:$gdxVersion"compile "com.badlogicgames.gdx:gdx-box2d:$gdxVersion"compile "com.badlogicgames.gdx:gdx-freetype:$gdxVersion"compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlinVersion"}
}
注意:突出显示的行包含更改。
Kotlin可以与Java混合使用,并且由于计划仅使用Kotlin,因此我们不会将Kotlin源提取到不同的目录中,而是将逐渐将当前的Java源代码转换为Kotlin。 幸运的是,我们只有一个班级可以转换。 我们可以通过几种方式做到这一点。 如果使用的是IntelliJ,最简单的方法是从“ 工具”菜单中选择类,然后选择“ 将Java文件转换为Kotlin文件” 。
还有其他方法,例如,创建扩展名为.kt
的空文件,复制Java文件的内容并将其粘贴到新的.kt
文件中。 IntelliJ将提示您进行转换。
当然,只有安装并启用了Kotlin插件,所有这一切才有可能。
让我们检查由gdx设置应用程序生成的Nemo
类文件:
package net.obviam.nemo;import com.badlogic.gdx.ApplicationAdapter;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;public class Nemo extends ApplicationAdapter {SpriteBatch batch;Texture img;@Overridepublic void create () {batch = new SpriteBatch();img = new Texture("badlogic.jpg");}@Overridepublic void render () {Gdx.gl.glClearColor(1, 0, 0, 1);Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);batch.begin();batch.draw(img, 0, 0);batch.end();}
}
和生成的Kotlin文件:
package net.obviam.nemoimport com.badlogic.gdx.ApplicationAdapter
import com.badlogic.gdx.Gdx
import com.badlogic.gdx.graphics.GL20
import com.badlogic.gdx.graphics.Texture
import com.badlogic.gdx.graphics.g2d.SpriteBatchclass Nemo : ApplicationAdapter() {internal var batch: SpriteBatchinternal var img: Textureoverride fun create() {batch = SpriteBatch()img = Texture("badlogic.jpg")}override fun render() {Gdx.gl.glClearColor(1f, 0f, 0f, 1f)Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT)batch.begin()batch.draw(img, 0f, 0f)batch.end()}
}
自动转换不是完美的,如果我们编译该类,则会遇到两个错误:
Error:(9, 4) Gradle: Property must be initialized or be abstract
Error:(10, 4) Gradle: Property must be initialized or be abstract
错误指的是突出显示的行(10和11)中的2个未初始化的类属性。
internal var batch: SpriteBatch
internal var img: Texture
在Kotlin中,必须在构造函数或类的init方法中初始化声明的non null
属性。 但是这样做,我们将不会使用libGdx生命周期方法,因此我们可以应用Kotlin的一项功能: Late Initialized Properties 。 这是通过使用lateinit
修饰符实现的。
internal lateinit var batch: SpriteBatch
internal lateinit var img: Texture
这将标记属性以进行后期初始化,并且在初始化之前对属性的任何访问将通过特殊异常来发出信号。
就是这样,我们有了Kotlin libGdx项目。 我们可以构建它并以常规方式运行它。
最简单的方法是使用Gradle包装器从命令行运行它。 在项目的根目录中,执行以下命令(Linux,OSX):./gradlew desktop:run或在Windows gradlew.bat desktop:run上
或按照Wiki中的说明进行操作: https : //github.com/libgdx/libgdx/wiki/Project-Setup-Gradle
应该会出现非常熟悉的引导屏幕。
接下来,我们将探索游戏开发中的一些常见任务,以及如何使用Kotlin来实现这些任务。
- 不断发展的项目可以在这里找到: https : //github.com/obviam/kotlin-gdx-nemo
翻译自: https://www.javacodegeeks.com/2016/01/using-libgdx-kotlin.html
java中使用kotlin