在讲义中,原始源代码如下
$(#suit).click(function(){
var data = {};
data.Numpolice = $(#num).val();
data.Raison = $(#raison).val();
data.Tel = $(#tel).val();
data.Email = $(#email).val();
$.ajax({
type: "POST",
url: "/PoliceAssurance/",
data: data,
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(data){
alert(data);
},
failure: function(errMsg) {
alert(errMsg);
}
});
});
但是,在当前的scala版本中不推荐使用sort1。
所以,我想改用insertSort。
src/library/scala/util/Sorting.scala
private val sort1 = {
val method = scala.util.Sorting.getClass.getDeclaredMethod(”sort1”, classOf[Array[Int]], classOf[Int], classOf[Int])
method.setAccessible(true)
(xs: Array[Int], offset: Int, len: Int) => {
method.invoke(scala.util.Sorting, xs, offset.asInstanceOf[AnyRef], len.asInstanceOf[AnyRef])
}
}
有可能吗?
答案 0 :(得分:2)
你可以做这个反思,但不要。 请不要。私有方法是私有的,有一个原因。实施可能会改变,可能会被带走,或其他任何东西。使用私有方法是一种非常糟糕的绑定形式,我们首先将它们设为私有。也就是说,我们不应该知道在一个类的私人方法的引导下发生了什么。编写这样做的代码非常脆弱和易变。
如果您真的对如何感兴趣,请继续阅读,但最好的办法是停在这里并尝试别的。
创建insertionSort
方法的多个版本(每个专用类型一个)。您可以对scala.util.Sorting
进行反编译,以使用正确的签名找到正确的方法。这里使用的是insertionSort$mIc$sp
。然后,您可以根据需要通过反射访问它。
val sort = {
val method = scala.util.Sorting.getClass.getDeclaredMethod("insertionSort$mIc$sp", classOf[Array[Int]], classOf[Int], classOf[Int], classOf[Ordering[Int]])
method.setAccessible(true)
(xs: Array[Int], offset: Int, len: Int) => {
method.invoke(scala.util.Sorting, xs, offset.asInstanceOf[AnyRef], len.asInstanceOf[AnyRef], implicitly[Ordering[Int]])
}
}
但请,不要!