S********t 发帖数: 3431 | 1 比如scala里:
class Foo {
abstract class Bar[A] (val id: String) {}
}
我在另外一个 Java project里想要 extends这Bar:
Foo foo = ...
Foo.Bar bar = foo.new Bar(foo, "id") {...}
可以这样做吗?我试了似乎是可以 compile,但 runtime总是说Bar的 constructor
NoSuchMethod...
请教下版上的scala-java高手,是不允许这样做,还是需要一些什么 trick吗?多谢!
具体的 background是在写一个 Java的 finagle-thrift service,可twitter
finagle全是用scala写的。。。想写个 request independent的 context extraction
就碰到这个问题了。。。 |
l********s 发帖数: 276 | 2 感觉不可能,你这个java得新class里面的构造函数是怎么override那个id的? |
l******t 发帖数: 55733 | |
H****S 发帖数: 1359 | 4 Any reason you have to make Foo.Bar polymorphic? If you make it monomorphic
(get rid of [A]), it actually compiles and is runnable.
// in scala
class Foo {
abstract class Bar(val id: String) {}
}
// in java
public class MainFoo {
public static void main(String... args) {
Foo2 foo = new Foo2();
Foo2.Bar bar = foo.new Bar("id") {};
}
}
比如scala里:
【在 S********t 的大作中提到】 : 比如scala里: : class Foo { : abstract class Bar[A] (val id: String) {} : } : 我在另外一个 Java project里想要 extends这Bar: : Foo foo = ... : Foo.Bar bar = foo.new Bar(foo, "id") {...} : 可以这样做吗?我试了似乎是可以 compile,但 runtime总是说Bar的 constructor : NoSuchMethod... : 请教下版上的scala-java高手,是不允许这样做,还是需要一些什么 trick吗?多谢!
|
S********t 发帖数: 3431 | 5 Foo Bar是 third party library (twitter/finagle-core),没法改的。。。
monomorphic
【在 H****S 的大作中提到】 : Any reason you have to make Foo.Bar polymorphic? If you make it monomorphic : (get rid of [A]), it actually compiles and is runnable. : // in scala : class Foo { : abstract class Bar(val id: String) {} : } : // in java : public class MainFoo { : public static void main(String... args) { : Foo2 foo = new Foo2();
|
S********t 发帖数: 3431 | 6 好像确实不 work
最后想了个办法,写了一小段scala去extend那个abstract inner class,然后跟我的
java code混在一起用,似乎就行了
【在 l********s 的大作中提到】 : 感觉不可能,你这个java得新class里面的构造函数是怎么override那个id的?
|