假设我在Scala中已经运行了一个基于Play 2.0框架的应用程序,它可以提供以下URL:
它以所有已知生日的列表作出回应
我现在想通过添加使用可选的"from"(日期)和"to"请求参数限制结果的功能来增强此功能,例如
HTTP://本地主机:9000 /生日从= 20120131&到= 20120229?
(此处的日期解释为yyyyMMdd)
我的问题是如何使用Scala处理Play 2.0中的请求参数绑定和解释,特别是考虑到这两个参数都应该是可选的.
这些参数应该以某种方式在"路线"规范中表达吗?或者,响应的Controller方法应该以某种方式从请求对象中分离出params吗?还有另一种方法吗?
这个问题涉及 JIT 编译器确定它不会再生成堆栈跟踪的情况,如果它认为它之前已经这样做了一定次数。我知道这被称为“快速抛出”或“预分配”异常。
一般来说,如果遇到这样一个预先分配的异常,在 JIT 认为值得编译之前,在 JVM 生命周期的某个更早的时间点应该至少可以找到一次丢失的堆栈跟踪。
我的问题是,从报告的预分配异常到至少一个早期异常实例的映射是否可以保证是确定性的,如果不是,是否有任何方法可以避免这是除禁用之外的歧义来源完全使用 -XX:-OmitStackTraceInFastThrow 进行优化。
一个简单的例子:
报告的缩短/预分配异常是通用的,例如 NullPointerException。如果在 JVM 的早期生命周期中只有一种类型的堆栈跟踪以 NPE 结束,那么没问题。但是,如果代码中的各个点已经有多个 NPE 呢?JVM 没有给出任何早期堆栈已被编译或是否已被编译的任何指示,那么您如何确定性地确定堆栈跟踪会是什么?
这种情况真的会出现吗,或者现代 Hotspot JIT 是否足够聪明来避免产生这种歧义?
在java中是否有一种方法可以声明一个方法参数,即某种类型的集合,但是它的大小有限?
例如,类似于:
public Car(String colour, Wheel[4])
Run Code Online (Sandbox Code Playgroud)
建议可以使用颜色和4个轮子来构建汽车.(显然,这个特定的例子可以通过改变方法来实现,通过4个轮子作为单独的参数进行枚举,但是不能缩放)
似乎这些约束应该通过方法头表达,但我不能想到java会如何允许它.