gpt4 book ai didi

java - scala重写静态java方法

转载 作者:太空宇宙 更新时间:2023-11-04 06:19:34 26 4
gpt4 key购买 nike

我正在尝试使用Webgraph http://webgraph.di.unimi.it/ Scala 中的框架。这里存在一些定制 Loader 类的可能性。此定制是通过反射完成的。

...
graphClass = Class.forName( graphClassName ); // graphClassName string name of class
graph = (ImmutableGraph)graphClass.getMethod( "load", classOf[CharSequence] ).invoke( null, is );
...

在java中“load”是类的静态方法,但是我如何在scala上编写这个方法以允许我的代码工作?我已经尝试过

class MyLoader {
def load(filename:CharSequence ) = ...
}

甚至

object MyLoader {
def load(filename:CharSequence ) = ...
}

与 graphClassName = "MyLoader$"

但没有成功。

已知且可行的解决方案是编写桥接 Java 类,但如果存在某种“合法”方法来执行此操作,则很有趣。

//     MyLoader.java

public class MyLoader {

public static ImmutableGraph load( CharSequence basename ) throws IOException {
return new ScalaMyLoader(basename);
}

}

最佳答案

定义一个对象,但反射(reflect)“MyLoader.class”。

您将在那里看到一个静态转发器方法。

对于

object Foo { def foo = 42 }

然后

$javap -pv Foo   // not Foo$
{
public static int foo();
flags: ACC_PUBLIC, ACC_STATIC
Code:
stack=1, locals=0, args_size=0
0: getstatic #16 // Field stat/Foo$.MODULE$:Lstat/Foo$;
3: invokevirtual #18 // Method stat/Foo$.foo:()I
6: ireturn
}

关于java - scala重写静态java方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27591279/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com