2011-12-14 29 views
4

我使用游戏现在,这里是在controller.class一些代码,我不明白:为什么游戏框架简单地抛出一个新的渲染在控制器类

/** 
* Render a 200 OK application/json response 
* @param jsonString The JSON string 
*/ 
protected static void renderJSON(String jsonString) { 
    throw new RenderJson(jsonString); 
} 

有什么重要的原因使游戏框架只需抛出一个新的Render对象?似乎有线使用“扔”没有例外。

回答

7

Play使用异常进行流控制 - 而不是你的方法返回像Model这样的东西,它们都会抛出异常。他们是未经检查的异常(如NullPointerException等),这意味着您不需要方法签名中的throws子句。

很多人都被Play抛出像这样的Exceptions这个事实吓到了,但实际上它非常快。这有两个原因

  1. Java异常投掷更快了很多比它
  2. 如果你看看RenderJson父类(ES),你会看到一个方法调用,fillInStackTrace()(至少我认为这就是它所称的)被重写而没有做任何事情 - 当出现错误时创建详细的堆栈跟踪需要花费很多时间,但通常没有问题,因为通常情况下抛出异常并不是一直抛出。使用Play进行流量控制时,需要删除代码的堆栈跟踪生成部分。