在纯
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只是在“包装”中提到了一个“综合类”.听起来不像它可以命名.
解决方法
的确,您的
link没有指定将您的方法作为静态方法的合成类的确切性质(如名称).
我试图让代码段正在执行的类
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");
并得到所需的结果.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。