Java 如何在Clojure中实现具有具体类型参数的接口?

Java 如何在Clojure中实现具有具体类型参数的接口?,java,amazon-web-services,clojure,Java,Amazon Web Services,Clojure,我正在尝试使用Clojure的AWS Lambda。这是有效的Java代码: import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.RequestHandler; public class Dbmgmt implements RequestHandler<Object, Object> { @Override public

我正在尝试使用Clojure的AWS Lambda。这是有效的Java代码:

import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;

public class Dbmgmt implements RequestHandler<Object, Object> {

    @Override
    public String handleRequest(Object in, Context ctx) {
        System.out.println("ok");
        ctx.getLogger().log("ok");
        return "ok";
    }
}
在两个类上使用Javap:

爪哇:

我想知道实现具有具体返回类型的接口的最佳方法是什么。根据现行规范,AWS投诉:

"errorMessage": "Class dbmgmt does not implement RequestHandler with concrete type parameters"

似乎没有使用返回类
字符串
实现
handleRequest
方法,只有
对象
。您可以将其作为方法名称的“类型提示”:

(reify RequestHandler
  (^String handleRequest [this ^Object in ^Context ctx] "ok")))

(编辑:还原编辑,但添加完整的类型提示,这似乎是必需的。)

我能解决的最接近的问题是:

(ns dbmgmt
  (:gen-class
    :implements [com.amazonaws.services.lambda.runtime.RequestHandler]
    :methods [[handleRequest [Object com.amazonaws.services.lambda.runtime.Context] String]]))
这将生成以下类:

public class dbmgmt implements com.amazonaws.services.lambda.runtime.RequestHandler {
  public static {};
  public dbmgmt();
  public boolean equals(java.lang.Object);
  public java.lang.String toString();
  public int hashCode();
  public java.lang.Object clone();
  public java.lang.Object handleRequest(java.lang.Object, com.amazonaws.services.lambda.runtime.Context);
  public java.lang.String handleRequest(java.lang.Object, com.amazonaws.services.lambda.runtime.Context);
  public static void main(java.lang.String[]);
}

但是,它仍然没有Java版本所具有的RequestHandler。我相信目前为止,完全在Clojure中实现这一点是不可能的。

是的,我也在考虑同样的问题,不幸的是,它没有起作用。
(reify RequestHandler
  (^String handleRequest [this ^Object in ^Context ctx] "ok")))
(ns dbmgmt
  (:gen-class
    :implements [com.amazonaws.services.lambda.runtime.RequestHandler]
    :methods [[handleRequest [Object com.amazonaws.services.lambda.runtime.Context] String]]))
public class dbmgmt implements com.amazonaws.services.lambda.runtime.RequestHandler {
  public static {};
  public dbmgmt();
  public boolean equals(java.lang.Object);
  public java.lang.String toString();
  public int hashCode();
  public java.lang.Object clone();
  public java.lang.Object handleRequest(java.lang.Object, com.amazonaws.services.lambda.runtime.Context);
  public java.lang.String handleRequest(java.lang.Object, com.amazonaws.services.lambda.runtime.Context);
  public static void main(java.lang.String[]);
}