我有一些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代码。 谁能告诉我一个方法呢?
答案 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。