簡體   English   中英

從 Java 調用 Kotlin — 錯誤:演示包不存在

[英]Calling Kotlin from Java — error: package demo does not exist

我不明白文檔

包級函數

在包 org.foo.bar 內的文件 example.kt 中聲明的所有函數和屬性,包括擴展函數,都被編譯為名為 org.foo.bar.ExampleKt 的 Java 類的靜態方法。

// example.kt
package demo

class Foo

fun bar() {
}

// Java
new demo.Foo();
demo.ExampleKt.bar();

我的代碼如下。

編譯錯誤; 構建失敗:

thufir@dur:~/NetBeansProjects/kotlin$ 
thufir@dur:~/NetBeansProjects/kotlin$ gradle compileJava

> Task :compileJava
/home/thufir/NetBeansProjects/kotlin/src/main/java/net/bounceme/dur/kotlin/App.java:12: error: package demo does not exist
        new demo.Foo();
                ^
/home/thufir/NetBeansProjects/kotlin/src/main/java/net/bounceme/dur/kotlin/App.java:13: error: package demo does not exist
        demo.ExampleKt.bar();
            ^
2 errors


FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':compileJava'.
> Compilation failed; see the compiler error output for details.

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

* Get more help at https://help.gradle.org

BUILD FAILED in 0s
1 actionable task: 1 executed
thufir@dur:~/NetBeansProjects/kotlin$ 

java源碼:

package net.bounceme.dur.kotlin;

import java.util.logging.Logger;

public class App {

    private static final Logger LOG = Logger.getLogger(App.class.getName());

    private void run() {
        LOG.info("running");

        new demo.Foo();
        demo.ExampleKt.bar();

    }

    public static void main(String[] args) {
        new App().run();
    }
}

科特林來源:

package demo;

class Foo

fun bar() {
}

項目:

thufir@dur:~/NetBeansProjects/kotlin$ 
thufir@dur:~/NetBeansProjects/kotlin$ tree
.
├── build
│   ├── classes
│   │   └── java
│   │       └── main
│   └── tmp
│       └── compileJava
├── build.gradle
├── gradle
│   └── wrapper
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── settings.gradle
└── src
    ├── main
    │   ├── java
    │   │   └── net
    │   │       └── bounceme
    │   │           └── dur
    │   │               └── kotlin
    │   │                   └── App.java
    │   └── kotlin
    │       └── example.kt
    └── test
        └── java
            └── AppTest.java

18 directories, 9 files
thufir@dur:~/NetBeansProjects/kotlin$ 

在你的 build.gradle(模塊)中使用它:

apply plugin: 'kotlin-android'
  1. 確保你在 Android Studio 中安裝了 Kotlin 插件
  2. 將 Kotlin 添加到項目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
        }
  1. 在您的模塊(應用程序) gradle.build上應用 kotlin-android 插件,如下所示:

     plugins { id 'com.android.application' id 'kotlin-android' }

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();
    }
}

科特林代碼:

package demo

fun bar() {
    println("yeah")
}

其中kotlin文件是src/main/kotlin下直接的helloWrold.kt

您的 java 文件中似乎缺少 kotlin 文件的導入。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM