2014-11-21 96 views
0

我有一些Java代码,其定义了两类如下如何将Java类中某些内部类的Class类型传递给Scala?

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; 
     } 

    } 

现在我想要通过内部类酒吧的类型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

你是什么意思'我想通过Class类的内部类Bar到Scala中的其他代码。对不起,我不明白 – Jatin 2014-11-21 09:41:33

+2

Bar'在Java代码中被声明为受保护的。使用Java或其他语言将它传递给另一个类是值得关注的。你可能最好将你需要的东西复制出来并通过。 – 2014-11-21 09:48:12

+0

@Jatin:我想将内部类的类型信息传递给Scala代码中的一个泛型方法。如果我耳朵不够清晰,我很抱歉。 – 2014-11-21 10:04:51

回答

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

+0

难道你不认为他应该让'Bar'类'static'为此工作吗?我很好奇,因为我不确定。 – EpicPandaForce 2014-11-21 09:57:14

+1

@EpicPandaForce不,他不应该。 – 2014-11-21 10:00:20

+0

无法更改Java代码,因为该代码是库的一部分。 – 2014-11-21 10:01:23

相关问题