繁体   English   中英

Scala覆盖静态Java方法

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM