Thu*_*fir 7 java oop gradle kotlin kotlin-interop
我不明白文档:
\n\n\n\n\n包级函数
\n\n包 org.foo.bar 内的 example.kt 文件中声明的所有函数和属性(包括扩展函数)都被编译为名为 org.foo.bar.ExampleKt 的 Java 类的静态方法。
\n
// example.kt\npackage demo\n\nclass Foo\n\nfun bar() {\n}\n\n// Java\nnew demo.Foo();\ndemo.ExampleKt.bar();\nRun Code Online (Sandbox Code Playgroud)\n\n我的代码如下。
\n\n编译错误;构建失败:
\n\nthufir@dur:~/NetBeansProjects/kotlin$ \nthufir@dur:~/NetBeansProjects/kotlin$ gradle compileJava\n\n> Task :compileJava\n/home/thufir/NetBeansProjects/kotlin/src/main/java/net/bounceme/dur/kotlin/App.java:12: error: package demo does not exist\n new demo.Foo();\n ^\n/home/thufir/NetBeansProjects/kotlin/src/main/java/net/bounceme/dur/kotlin/App.java:13: error: package demo does not exist\n demo.ExampleKt.bar();\n ^\n2 errors\n\n\nFAILURE: Build failed with an exception.\n\n* What went wrong:\nExecution failed for task \':compileJava\'.\n> Compilation failed; see the compiler error output for details.\n\n* Try:\nRun with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.\n\n* Get more help at https://help.gradle.org\n\nBUILD FAILED in 0s\n1 actionable task: 1 executed\nthufir@dur:~/NetBeansProjects/kotlin$ \nRun Code Online (Sandbox Code Playgroud)\n\njava源:
\n\npackage net.bounceme.dur.kotlin;\n\nimport java.util.logging.Logger;\n\npublic class App {\n\n private static final Logger LOG = Logger.getLogger(App.class.getName());\n\n private void run() {\n LOG.info("running");\n\n new demo.Foo();\n demo.ExampleKt.bar();\n\n }\n\n public static void main(String[] args) {\n new App().run();\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n\n科特林来源:
\n\npackage demo;\n\nclass Foo\n\nfun bar() {\n}\nRun Code Online (Sandbox Code Playgroud)\n\n项目:
\n\nthufir@dur:~/NetBeansProjects/kotlin$ \nthufir@dur:~/NetBeansProjects/kotlin$ tree\n.\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 build\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 classes\n\xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 java\n\xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 main\n\xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 tmp\n\xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 compileJava\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 build.gradle\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 gradle\n\xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 wrapper\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 gradle-wrapper.jar\n\xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 gradle-wrapper.properties\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 gradlew\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 gradlew.bat\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 settings.gradle\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 src\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 main\n \xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 java\n \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 net\n \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 bounceme\n \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 dur\n \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 kotlin\n \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 App.java\n \xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 kotlin\n \xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 example.kt\n \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 test\n \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 java\n \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 AppTest.java\n\n18 directories, 9 files\nthufir@dur:~/NetBeansProjects/kotlin$ \nRun Code Online (Sandbox Code Playgroud)\n
m.s*_*d.s 13
在你的 build.gradle (模块)中使用它:
apply plugin: 'kotlin-android'
Run Code Online (Sandbox Code Playgroud)
小智 8
gradle.build: dependencies {
classpath "com.android.tools.build:gradle:4.1.2"
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.4.21"
classpath "org.jetbrains.kotlin:kotlin-android-extensions:1.4.21"
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
Run Code Online (Sandbox Code Playgroud)
在您的模块(应用程序)上应用 kotlin-android 插件,gradle.build如下所示:
plugins {
id 'com.android.application'
id 'kotlin-android'
}
Run Code Online (Sandbox Code Playgroud)
demo 文件夹应该位于 src/main/kotlin 下,其下有 example.kt。
所以应该是 src/main/kotlin/demo/example.kt
[编辑] 不需要匹配目录和包:源文件可以任意放置在文件系统中。
[edit2]我做了一个有效的例子:
Java代码
package test;
import demo.HelloWorldKt;
public class Test {
public static void main(String[] args) {
ExampleKt.bar();
}
}
Run Code Online (Sandbox Code Playgroud)
科特林代码:
package demo
fun bar() {
println("yeah")
}
Run Code Online (Sandbox Code Playgroud)
其中kotlin文件是直接在src/main/kotlin下的helloWrold.kt
您的 java 文件中似乎缺少 kotlin 文件的导入。