我正在做一个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"
}
}我的流形的扩展方法:
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类添加一个方法,我已经尝试过了:
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发布于 2021-10-09 18:33:08
首先,你可以尝试上面提到的答案。但是如果你使用的是IntelliJ IDEA,那么一个更简单的解决方案可能是:
Ctrl+Alt+S打开集成开发环境设置->插件->搜索mainfold -> Install it ->创建一个新的扩展类->键入要扩展的类->创建并在其中执行您的工作。
发布于 2021-10-10 01:56:14
请参阅Gradle Setup文档了解多重科学。您的依赖项应该是:
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']
}
}此外,扩展类的包必须遵循约定documented here。基本上,类的限定名称附加在“扩展”包上。如果您使用的是Java模块,那么包应该使用模块的名称进行限定。例如,
package mymodule.extensions.java.lang.String;https://stackoverflow.com/questions/69509002
复制相似问题