[英]scala override static java method
我正在尝试在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 ) = ...
}
与graphClassName =“ MyLoader $”
但没有成功。
已知且可行的解决方案是编写桥Java类,但是如果存在某种“合法”的方式来做到这一点,则很有趣。
// MyLoader.java
public class MyLoader {
public static ImmutableGraph load( CharSequence basename ) throws IOException {
return new ScalaMyLoader(basename);
}
}
定义一个对象,但要考虑“ 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
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.