如何将一些内部类的类类型从Java源传递给Scala?

时间:2014-11-21 09:36:17

标签: java scala

我有一些java代码,它定义了两个类,如下所示

public class Foo{
      /*Some code here*/

      private final Bar b = new Bar(); //Object of inner class.

      final class Bar{

      /*Some code here*/
      }

      @Override
      public Class<? extends SomeClass> getSerializedClass(){
        return Bar.class;
      }

    }

现在我希望将内部类 Bar 的类型传递给Scala中的其他代码。

trait Trait1 {

  def func1[B](path: String, overwrite:Boolean= false, value:Int ) = {

    val converter = new OutputConverter[A, Bar, B] (K,V)
    Sink[A, B](path, converter, overwrite)


}

case class Sink[K, B](path: String,
                      outputConverter: OutputConverter[A, Bar, B],
                      overwrite: Boolean = false) extends DataSink[A, Bar, B] with SinkSource {
   /**Some code here*/

}

难点在于我无法更改Java代码。 谁能告诉我一个方法呢?

1 个答案:

答案 0 :(得分:1)

如果您想将其用作类型(例如Java中的Foo.Bar):Foo#Bar(例如OutputConverter[A, Foo#Bar, B])。

如果你想要一个Class[_]对象(如Java中的Foo.Bar.class):classOf[Foo#Bar]

编辑:我没有注意到Bar不公开。如果您的Scala代码与Java代码在同一个包中,您应该能够以上述方式访问它;如果不是,则无法访问Bar(反射除外),也不应该访问。

有关详细信息,请参阅http://www.iulidragos.org/?p=166