我正在開發一個 Java 11 專案,
這是我的 build.gradle:
plugins {
id 'java'
}
//
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
repositories {
maven { url 'https://oss.sonatype.org/content/repositories/snapshots/' }
}
dependencies {
implementation 'org.projectlombok:lombok:1.18.18'
implementation "io.vavr:vavr:0.10.3"
compileOnly 'org.projectlombok:lombok:1.18.20'
annotationProcessor 'org.projectlombok:lombok:1.18.20'
implementation 'systems.manifold:manifold-science:2021.1.25-SNAPSHOT'
testCompileOnly 'org.projectlombok:lombok:1.18.20'
testAnnotationProcessor 'org.projectlombok:lombok:1.18.20'
testAnnotationProcessor 'org.openjdk.jmh:jmh-generator-annprocess'
testImplementation 'org.junit.jupiter:junit-jupiter-engine'
}
test {
useJUnitPlatform()
testLogging {
events "passed", "skipped", "failed"
}
}
我的 Manifold 的擴展方法:
import manifold.ext.rt.api.Extension;
import manifold.ext.rt.api.This;
@Extension
public class MyStringEx {
public static void echo(@This String thiz) {
System.out.println(thiz);
}
}
它成功編譯。但是現在,我想java.lang.String通過Manifold擴展注釋在類中添加一個方法,我試過這個:
public class Main {
public static void main(String[] args) {
"hello".echo(); // Add your own methods to String!
}
}
但我得到錯誤:
java: cannot find symbol
symbol: method echo()
location: class java.lang.String
uj5u.com熱心網友回復:
有關流形科學,請參閱Gradle 設定檔案。您的依賴項應該是:
implementation 'systems.manifold:manifold-science:2021.1.25'
annotationProcessor 'systems.manifold:manifold-ext:2021.1.25'
您還需要為 Manifold 添加編譯器引數:
if (JavaVersion.current() != JavaVersion.VERSION_1_8 &&
sourceSets.main.allJava.files.any {it.name == "module-info.java"}) {
tasks.withType(JavaCompile) {
// if you DO define a module-info.java file:
options.compilerArgs = ['-Xplugin:Manifold', '--module-path', it.classpath.asPath]
}
} else {
tasks.withType(JavaCompile) {
// If you DO NOT define a module-info.java file:
options.compilerArgs = ['-Xplugin:Manifold']
}
}
此外,您的擴展類的包必須遵循此處記錄的約定。基本上類的限定名稱附加到“擴展”包。如果您使用的是 Java 模塊,則該包應使用模塊名稱進行限定。例如,
package mymodule.extensions.java.lang.String;
uj5u.com熱心網友回復:
首先,您可以嘗試上面提到的答案。但如果您使用的是 IntelliJ IDEA,那么更簡單的解決方案可能是:
Ctrl Alt S 打開 IDE 設定 -> 插件 -> 搜索 mainfold -> 安裝它 -> 創建一個新的擴展類 -> 輸入你想要擴展的類 -> 創建并在其中完成你的作業。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/311269.html
