小编Dun*_*gor的帖子

如何找到Java8方法引用的目标?

我想捕获对模拟对象的调用

public interface Service {
    public String stringify(Object o);
}
service = mockery.mock(Service.class);
mockery.allowing(service::stringify).with(42).will(() -> "42");
Run Code Online (Sandbox Code Playgroud)

所以里面allowing我有一个Function<Object, String>

是否有任何reflecto-magic可以让我从方法参考创建的函数中找到服务?

public WithClause allowing(Function<T,R> f) {
    Object myServiceBackAgain = findTargetOf(function);
    ....
}
Run Code Online (Sandbox Code Playgroud)

我知道函数将始终来自这些方法引用,所以我很乐意尽可能地向下转换.

这与相关的问题不同是否可以将方法引用转换为MethodHandle?因为,一开始它不是同一个问题,只是在相关领域.即使我可以得到一个MethodHandle,我也无法从中获取目标.

java reflection java-8

6
推荐指数
1
解决办法
867
查看次数

什么是Scala中的非方法局部变量?

在对Scala Sink或Swim的评论中,Josh Sureth将非方法本地变量称为Scala代码中的问题原因.

该页面是该短语的唯一Google匹配non-method-local vars,所以它意味着什么,问题是什么?

scala

5
推荐指数
1
解决办法
152
查看次数

5
推荐指数
1
解决办法
1871
查看次数

为什么我的某些AJAX请求没有引荐/引荐标头?

我有一个Webapp通过AJAX请求呈现购物袋项目数。JQuery用于发出请求并适当地渲染包。

我们在服务器上看到的一小部分相当数量的请求没有设置引荐标头,尽管它们似乎来自合法的浏览器请求。用户代理字符串包括Windows和Mac上的Chrome,Safari和Firefox。查看会话,似乎整个会话而不是请求都没有发送标头。

在什么情况下会出现这种预期行为?

javascript ajax jquery

5
推荐指数
0
解决办法
3387
查看次数

为什么Java编译器内联访问非静态最终字段?

我一直在运行一些微基准测试,并遇到了一个奇怪的问题.我正在使用java version "1.8.0_131"默认的编译器选项.

给定一个定义

public class JavaState {
    public String field = "hello";
    public final String finalField = "hello";
}
Run Code Online (Sandbox Code Playgroud)

field直接访问(state.field)生成

ALOAD 1
GETFIELD JavaState.field : Ljava/lang/String;
Run Code Online (Sandbox Code Playgroud)

但是finalField直接访问(state.finalField)会生成

ALOAD 1
INVOKEVIRTUAL java/lang/Object.getClass ()Ljava/lang/Class;
POP
LDC "hello"
Run Code Online (Sandbox Code Playgroud)

为什么在直接字段访问时字节码调用Object-> getClass()解释了调用getClass只是为了检查state不是null,但编译器已经内联了字段的值.

我可能合理地期望用不同的字段值替换更高版本的JavaState会导致其他代码在没有重新编译的情况下看到更改,但是这种内联可以防止这种情况发生.而我的基准测试表明,如果以性能的名义完成,它就无法正常工作; 至少在我的基准测试Raspberry Pi上,访问finalField速度比访问慢5-10%field.

内联价值的理由是什么final

java jvm javac

5
推荐指数
1
解决办法
479
查看次数

如何在Kotlin @Deprecated注释中指定泛型类型参数?

我想重命名一个Kotlin类型,留下一个不推荐使用的类型,以允许编译现有代码.

typealias TestContext<F> = ContextBuilder<F>
Run Code Online (Sandbox Code Playgroud)
@Deprecated("TestContext is now ContextBuilder", 
    replaceWith = ReplaceWith("ContextBuilder<F>"))
Run Code Online (Sandbox Code Playgroud)

导致TextContext<Unit>被替换ContextBuilder<F>

@Deprecated("TestContext is now ContextBuilder", 
    replaceWith = ReplaceWith("ContextBuilder"))
Run Code Online (Sandbox Code Playgroud)

导致TextContext<Unit>被替换ContextBuilder

我怎么能写replaceWith表达,这样的IntelliJ代替TextContext<Unit>ContextBuilder<Unit>

kotlin

5
推荐指数
1
解决办法
155
查看次数

是否有标准的 Kotlin 函数用于将 Sequence 拆分为头部和尾部?

我正在考虑带有签名的东西,例如fun <T> Sequence<T>.destruct(): Pair<T, Sequence<T>>? 它将返回null一个空序列,否则接收器的第一个和其余部分。

kotlin

5
推荐指数
1
解决办法
102
查看次数

Scala REPL打印的类型是什么?

当我在repl中创建一个小Map时,它告诉我它的类型是immutable.Map

scala> Map(1->1, 2->2)                                    
res8: scala.collection.immutable.Map[Int,Int] = Map((1,1), (2,2))
Run Code Online (Sandbox Code Playgroud)

然而,这不是全部真相,就像在这种情况下一样

scala> Map(1->1, 2->2).getClass
res9: java.lang.Class[_] = class scala.collection.immutable.Map$Map2
Run Code Online (Sandbox Code Playgroud)

Scala如何决定打印什么作为表达式的类型?

scala read-eval-print-loop

4
推荐指数
1
解决办法
345
查看次数

用于逐步删除随机项目的首选Scala集合?

我有一个算法需要多次迭代,每次迭代都会对一个集合中的项目进行评分,并删除得分最高的项目.

我可以Vector用初始种群填充a ,不断将其替换为a var,或者选择一个可变集合作为a val.哪个可变集合最适合该法案?

scala scala-collections

4
推荐指数
1
解决办法
596
查看次数

我可以从Kotlin中的函数类型变量获得KFunction吗?

我正在尝试获取定义函数的名称

fun aFunction() = Unit

fun functionName(function: () -> Unit) : String {
  val functionAsKFunction: KFunction<Unit> = someMiracle(function)
  return functionAsKFunction.name
}

assertEquals("aFunction", functionName(::aFunction)) 
Run Code Online (Sandbox Code Playgroud)

reflection kotlin

4
推荐指数
1
解决办法
884
查看次数