在 Maven 项目中,我在 Intellij Maven 帮助器插件中使用(https://plugins.jetbrains.com/plugin/7179-maven-helper)。它是一个很棒的工具,有助于以非常方便的方式跟踪传递依赖关系。不幸的是,现在我有 Gradle 项目,但我没有找到类似的 gradle 解决方案。Gradle 有什么解决方案吗?
我写了使用方法参考的简单示例:
public class Main {
private static String identity(String param) {
return param;
}
public static void main(String... args) {
Function<String, String> fun = Main::identity;
System.out.println(fun.apply("Hello"));
}}
Run Code Online (Sandbox Code Playgroud)
And in generated byte code is InnerClass:
InnerClasses:
public static final #68= #67 of #71; //Lookup=class java/lang/invoke/MethodHandles$Lookup of class java/lang/invoke/MethodHandles
BootstrapMethods:
0: #35 invokestatic java/lang/invoke/LambdaMetafactory.metafactory:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;
Method arguments:
#36 (Ljava/lang/Object;)Ljava/lang/Object;....
Run Code Online (Sandbox Code Playgroud)
I supposed this innerClass is used in lambda bootstrap method, but I do not know when jvm create object of this class and …
谁能帮助我理解为什么在 1 种情况下我没有 ClassCastException?至少 String::trim 不是 MagicFunction。
public class Main {
@FunctionalInterface
interface MagicFunction extends Function<String, String> {
}
public static void main(String[] args) throws IOException {
// 1. OK
final MagicFunction fun1 = String::trim;
// 2. java.lang.ClassCastException
Function<String, String> trim = String::trim;
final MagicFunction fun2 = (MagicFunction) trim;
}
}
Run Code Online (Sandbox Code Playgroud)