Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala ClassCastException当作为in的表示进行理解时_Scala_Playframework_Classcastexception_For Comprehension - Fatal编程技术网

Scala ClassCastException当作为in的表示进行理解时

Scala ClassCastException当作为in的表示进行理解时,scala,playframework,classcastexception,for-comprehension,Scala,Playframework,Classcastexception,For Comprehension,在PlayFramework2.4中,我尝试将所有控制器方法转换为JavaScript路由 val jsRoutesClass = classOf[routes.javascript] val controllers = jsRoutesClass.getFields.map(_.get(null)) for ( controller <- controllers; method <- controller.getClass.getDeclaredMethods ) yie

在PlayFramework2.4中,我尝试将所有控制器方法转换为JavaScript路由

val jsRoutesClass = classOf[routes.javascript]
val controllers = jsRoutesClass.getFields.map(_.get(null))

for (
  controller <- controllers;
  method <- controller.getClass.getDeclaredMethods
) yield method.invoke(controller).asInstanceOf[JavaScriptReverseRoute]
val jsrouteClass=classOf[routes.javascript]
val controllers=JSRouteClass.getFields.map(uq.get(null))
为了(

controller让我们一步一步地查看代码,并查看每行生成的内容。 我将您的代码转换为完整的示例代码,但我希望我抓住了您代码的精华

package controllers

import play.api._
import play.api.mvc._

class Sample extends Controller {
  def hello(name: String) = Action {
    implicit req =>
    import routes.javascript._

    val jsRoutesClass = classOf[routes.javascript]
    val controllers = jsRoutesClass.getFields.map(_.get(null))
    val met = for (
        controller <- controllers;
        method <- controller.getClass.getDeclaredMethods
      ) yield method
    Ok(met.mkString(", "))
  }
}
您应该可以从路由中找到所有方法,但请注意还有带有返回类型字符串的
\u defaultPrefix()
方法

这就是第一个代码示例无法工作的原因。其中一个方法不返回
JavaScriptReverseRoute
,因此引发异常

这仍然无法解释第二个代码示例不起作用的原因。因此,让我们向示例控制器添加一些代码:

package controllers

import play.api._
import play.api.mvc._

class Sample extends Controller {
  def hello(name: String) = Action {
    implicit req =>
    import routes.javascript._

    val jsRoutesClass = classOf[routes.javascript]
    val controllers = jsRoutesClass.getFields.map(_.get(null))
    val met = for (
        controller <- controllers;
        method <- controller.getClass.getDeclaredMethods
      ) yield method.invoke(controller)
    Ok(met.mkString(", "))
  }
}
仔细看,您会发现末尾有一个rogue
,这意味着我们的临时
val met
的值位于JavaScriptReverseRoute的位置0,位于位置1和空字符串

因此,请查看您的解决方法操作
操作
导入routes.javascript_
val jsrouteClass=classOf[routes.javascript]
val controllers=JSRouteClass.getFields.map(uq.get(null))
val met=for(
控制器
package controllers

import play.api._
import play.api.mvc._

class Sample extends Controller {
  def hello(name: String) = Action {
    implicit req =>
    import routes.javascript._

    val jsRoutesClass = classOf[routes.javascript]
    val controllers = jsRoutesClass.getFields.map(_.get(null))
    val met = for (
        controller <- controllers;
        method <- controller.getClass.getDeclaredMethods
      ) yield method
    Ok(met.mkString(", "))
  }
}
public play.api.routing.JavaScriptReverseRoute controllers.javascript.ReverseSample.hello(), public java.lang.String controllers.javascript.ReverseSample._defaultPrefix()
package controllers

import play.api._
import play.api.mvc._

class Sample extends Controller {
  def hello(name: String) = Action {
    implicit req =>
    import routes.javascript._

    val jsRoutesClass = classOf[routes.javascript]
    val controllers = jsRoutesClass.getFields.map(_.get(null))
    val met = for (
        controller <- controllers;
        method <- controller.getClass.getDeclaredMethods
      ) yield method.invoke(controller)
    Ok(met.mkString(", "))
  }
}
JavaScriptReverseRoute(controllers.Sample.hello,
    function(name) {
      return _wA({method:"GET", url:"/" + (function(k,v) {return v})("name", encodeURIComponent(name))})
    }
  ), 
package controllers

import play.api._
import play.api.mvc._

class Sample extends Controller {
  def hello(name: String) = Action {
    implicit req =>
      import routes.javascript._

      val jsRoutesClass = classOf[routes.javascript]
      val controllers = jsRoutesClass.getFields.map(_.get(null))
      val met = for (
          controller <- controllers;
          method <- controller.getClass.getDeclaredMethods if method.getReturnType() == classOf[play.api.routing.JavaScriptReverseRoute]
         ) yield  method.invoke(controller).asInstanceOf[play.api.routing.JavaScriptReverseRoute]
       Ok(met.mkString(", "))
  }
}