[英]how to notate type argument for generically polymorphic static method in jshell?
在普通的Java中,我可以写
class P {
static <A> A id (A x) { return x; }
static int y = P.<Integer>id(8);
static String bar = P.<String>id("foo");
}
在jshell中,我可以声明并使用id
jshell> <A> A id (A x) { return x; }
| created method id(A)
jshell> int x = id(8)
x ==> 8
jshell> String y = id("foo")
y ==> "foo"
但我没有看到如何使类型参数明确。
jshell> String y = <String>id("foo")
| Error:
| illegal start of expression
| String y = <String>id("foo");
| ^
隐含上下文类的名称是什么?
(允许我回答这个问题的jshell规范的一部分)在哪里? http://openjdk.java.net/jeps/222刚刚提到“包装”中的“合成类”。 听起来不像它的名字。
实际上,您的链接未指定将您的方法作为静态方法的syntetic类的确切性质(如名称)。
我试图获取该片段正在执行的类
jshell> new Exception().printStackTrace()
java.lang.Exception
at REPL.$JShell$17.do_it$($JShell$17.java:8)
at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(java.base@9-ea/Native Method)
at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(java.base@9-ea/NativeMethodAccessorImpl.java:62)
at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(java.base@9-ea/DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(java.base@9-ea/Method.java:531)
at jdk.internal.jshell.remote.RemoteAgent.commandLoop(jdk.jshell@9-ea/RemoteAgent.java:124)
at jdk.internal.jshell.remote.RemoteAgent.main(jdk.jshell@9-ea/RemoteAgent.java:62)
jshell> Thread.currentThread().getStackTrace()[1].toString()
$15 ==> "do_it$(java:18)"
jshell> Thread.currentThread().getStackTrace()[1].getClassName()
$16 ==> ""
但正如您所看到的,信息不在堆栈跟踪中。
绕过它的最简单方法是将方法定义为自己类中的静态方法:
jshell> class B { static <A> A id(A x) {return x;} }
这允许你打电话
jshell> String y = B.<String>id("foo");
并获得所需的结果。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.