如何将Scala特性转换为java?
例如,假设我有如何将Scala特性转换为java?,scala,Scala,例如,假设我有 abstract class OrderRouter extends Market { } 我通常会实例化如下 new OrderRouter with NYSE 我将如何将上面的行翻译成java?纽约证券交易所是一种拓展市场的特质。你必须使用组合: class NYSE implements Market { void methodA() { //implementation } } interface Market { void
abstract class OrderRouter extends Market {
}
我通常会实例化如下
new OrderRouter with NYSE
我将如何将上面的行翻译成java?纽约证券交易所是一种拓展市场的特质。你必须使用组合:
class NYSE implements Market {
void methodA() {
//implementation
}
}
interface Market {
void methodA();
}
class OrderRouter implements Market {
Market market;
OrderRouter(Market m) {
this.market = m;
}
// for each method in market implements it and
// redirect the call to this.market
public void methodA() {
market.methodA();
}
}
然后:
OrderRouter or = new OrderRouter(new NYSE());
我相信将scala代码翻译成java的最佳选择是使用scala编译器并使用java生成的类文件 traits没有直接翻译成java。即使scala编译器基本上也会将代码从trait复制到具体的类,您也必须这样做:
abstract class A { void foo(); }
/* trait T {
void boo() { ... code ... }
}
*/
// This would be
// A with T
class AwithT extends A
{
// copied from T
void boo() { ... code ... }
// other definitions ...
};
看一看问题和公认的答案 总结是,假设NYSE有一个
getOrderBook()
方法,Java版本如下所示:
new OrderRouter() {
public OrderBook getOrderBook() {
return NYSE$class.getOrderBook();
}
}
Scala编译器为合成类生成字节码,这些合成类通过组合/包装混合在所有trait实现中。由于javac
没有这个特性,您需要自己将trait方法的委托连接到trait的单例对象