我们使用 Kryo 在 Scala 应用程序和 Java 应用程序之间进行通信。由于必须从 Java 使用类定义(并且我们不想将 Scala 库作为 Java 应用程序中的依赖项包含在内),因此我们使用 JavaBean 来定义传输对象。
然而,在Scala中直接使用JavaBeans有点麻烦。没有模式匹配,必须使用 new 等。我们现在正在做的是定义提取器并在 Scala 端的单独对象中应用方法,以便更好地使用这些类。
由于我们需要的大部分内容都是样板文件,因此我们想知道是否有一种方法可以自动执行此操作。例如,我们有这个 JavaBean(大约有 20 多种不同的消息类型):
public class HandshakeRequest extends Request {
private String gatewayId;
private String requestId;
private Date timestamp = new Date();
public HandshakeRequest(String gatewayId, String requestId) {
this.gatewayId = gatewayId;
this.requestId = requestId;
}
public String getGatewayId() { return gatewayId; }
public String getRequestId() { return requestId; }
public Date getTimestamp() { return timestamp; }
private HandshakeRequest() { /* …Run Code Online (Sandbox Code Playgroud) 我有一个类似这样的类:
class MyClass[T <: HList] {
val x: ???
}
Run Code Online (Sandbox Code Playgroud)
我的问题是xval 的类型.我想要的是让它成为一个HList,每个类型U的THList被替换为Option[U].即如果我指定:
new MyClass[Int :: String :: HNil]
Run Code Online (Sandbox Code Playgroud)
我想x有一种类型Option[Int] :: Option[String] :: HNil
这甚至可能吗?怎么做?
我们一直试图在我们的一个系统中追踪一个非常难以捉摸的错误,我们400 Bad Request在向服务器发出一些请求后收到错误.我们最终跟踪它到Spray中的HTTP Header缓存,由于某种原因,nodeCount变量in HttpHeaderParser被设置为> 32k的值,因为它稍后被转换为a Short,导致溢出.
我们通过禁用HTTP标头缓存(spray.can.server.parsing.header-cache.default = 0)来解决问题.我们试图制作一个可重复的最小项目但却无法做到.
我的问题是,我们可以期望完全禁用标头缓存有什么影响?我真的不明白为什么它甚至是必要的,因为在每个请求中都必须解析头文件(因为值可能已经改变).这是通过重用HttpHeader对象来节省内存吗?