【发布时间】:2016-05-20 06:23:45
【问题描述】:
我是 Scala 新手,我需要为我的 Java API 提供一个 scala 包装器
我有三个 Java 接口
public interface Client<T> {
<T> Future<T> execute(App<T> app);
}
public interface App<T> extends Serializable{
T process(AppContext context) throws Exception;
}
public interface AppContext {
File getDirectory();
void deleteDirectory();
File createDirectory(String path);
}
以下是创建 App 的 Java 代码
public class RandomApp extends App<String> {
@Override
public String process(AppContext context) {
// Inorder to access the methods in AppContext I need to access
// it by the following way
appContext.createDirectory("some path");
return "random";
}
}
我想要一个用于客户端接口的 Scala 包装器,它反过来调用 Java API。但我对新的 Scala API 做了一些修改
object ScalaConverter {
implicit class ScalaWrapper(client: Client) {
def scalaClient = new ScalaClient(client)
}
}
class ScalaClient(client: Client) {
def execute[T](appContext: AppContext => T): Future[T] = {
// I am passing appContext as closure instead of passing in
// App because I want to take the advantage of Closures in Scala
// I basically want to create an App with this appContext and
// pass it to the execute method
// For example - but this is not working
var app = // Need to create this app with appContext
Future {
client.execute(app)
}
}
}
【问题讨论】:
-
对不起,如果我的帖子不清楚。我想从 appcontext 创建一个 app 对象,因为 Java API 是 execute(app)
标签: java scala closures scala-collections