我正在尝试在Scala中使用Webgraph http://webgraph.di.unimi.it/框架。这里存在一些自定义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 ) = ...
}
with graphClassName =“MyLoader $”
但没有成功。
已知和工作的解决方案是编写桥接Java类,但如果存在一些“合法”的方法,这很有意思。
// MyLoader.java
public class MyLoader {
public static ImmutableGraph load( CharSequence basename ) throws IOException {
return new ScalaMyLoader(basename);
}
}
答案 0 :(得分:1)
定义一个对象,但反思“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
}