java – 如何在jshell中表示一般多态静态方法的类型参数?
发布时间:2020-12-14 16:20:14 所属栏目:Java 来源:网络整理
导读:在纯 Java中,我可以写 class P { static A A id (A x) { return x; } static int y = P.Integerid(8); static String bar = P.Stringid("foo");} 在jshell中,我可以声明并使用id jshell A A id (A x) { return x; }| created method id(A)jshell int x = id(
|
在纯
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");
并得到所需的结果. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
