标签: jshell

Java泛型:为什么这个输出可能?

我有这门课:

class MyClass<N extends Number> {
    N n = (N) (new Integer(8));
}
Run Code Online (Sandbox Code Playgroud)

我想得到这些输出:

System.out.println(new MyClass<Long>().n);
System.out.println(new MyClass<Long>().n.getClass());
Run Code Online (Sandbox Code Playgroud)
  1. 第一项System.out.println()陈述的输出:

    8
    
    Run Code Online (Sandbox Code Playgroud)
  2. 输出第二个System.out.println()陈述:

    java.lang.ClassCastException: java.lang.Integer (in module: java.base)
        cannot be cast to java.lang.Long (in module: java.base)
    
    Run Code Online (Sandbox Code Playgroud)

为什么我得到第一个输出?是不是也有演员?为什么我在第二个输出中得到异常?

PS:我使用的是Java 9; 我用JShell尝试了它,我在两个输出上都有一个例外.然后我尝试使用IntelliJ IDE并获得第一个输出,但第二个输出异常.

java generics intellij-idea jshell

51
推荐指数
2
解决办法
2725
查看次数

如何退出JShell并返回命令行?

使用JShell时,如何将其退回CMD线?

我已经尝试过ctrl+ x而且只是写作退出,但没有快乐.

java java-9 jshell

44
推荐指数
2
解决办法
9920
查看次数

如何在jshell java 9中导入外部库?

我试图理解jshell并摸索导入外部库.截至目前,我无法看到任何建议/解决方案.

有人可以告诉我,如果已经弄清楚这一点.

java-9 jshell

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

如何在脚本结束时关闭jshell?

如何指示jshell在脚本结尾处终止,类似于其他语言的解释器,例如python3node

遵循命令

./jshell -q /tmp/shell.java
Run Code Online (Sandbox Code Playgroud)

用脚本 /tmp/shell.java

System.out.println("Hello world");
Run Code Online (Sandbox Code Playgroud)

版画

Hello world
jshell> 
Run Code Online (Sandbox Code Playgroud)

并等待进一步的命令.我希望它立即停止在文件的末尾.

我正在寻找比System.exit(0);脚本末尾更优雅的东西.

java java-9 jshell

32
推荐指数
2
解决办法
7068
查看次数

使用JShell实例共享动态加载的类

请查看以下编辑内容

我正在尝试创建一个JShell实例,它允许我访问,并允许我与它创建的JVM中的对象进行交互.这适用于在编译时可用的类但对于动态加载的类失败.

public class Main {

    public static final int A = 1;
    public static Main M;

    public static void main(String[] args) throws Exception {
        M = new Main();
        ClassLoader cl = new URLClassLoader(new URL[]{new File("Example.jar").toURL()}, Main.class.getClassLoader());
        Class<?> bc = cl.loadClass("com.example.test.Dynamic");//Works
        JShell shell = JShell.builder()
                .executionEngine(new ExecutionControlProvider() {
                    @Override
                    public String name() {
                        return "direct";
                    }

                    @Override
                    public ExecutionControl generate(ExecutionEnv ee, Map<String, String> map) throws Throwable {
                        return new DirectExecutionControl();
                    }
                }, null)
                .build(); …
Run Code Online (Sandbox Code Playgroud)

java dynamic-class-loaders java-9 jshell

24
推荐指数
1
解决办法
620
查看次数

如何用jshell执行java脚本?

鉴于Java 9已经出现在我们身上,我们终于可以拥有一个java REPL了,jshell我希望有一种方法可以将一个shebang添加到脚本中并对其进行jshell解释.

我尝试创建test.jsh:

#!/usr/bin/env jshell -s
System.out.println("Hello World")
/exit
Run Code Online (Sandbox Code Playgroud)

然而,这给了:

? ./test.jsh
|  Error:
|  illegal character: '#'
|  #!/usr/bin/env jshell -s
|  ^
|  Error:
|  illegal start of expression
|  #!/usr/bin/env jshell -s
|    ^
Hello World
Run Code Online (Sandbox Code Playgroud)

事实证明,在OpenJDK https://bugs.openjdk.java.net/browse/JDK-8167440中有一个增强请求.

有没有其他方法可以做到这一点?

java shebang java-9 jshell

20
推荐指数
2
解决办法
3045
查看次数

JShell的限制是什么?

我发现了这个问题,而另一个,这个有趣的是它引出了几个问题,至少对我而言:

相当开放的问题,但在哪里被jshell 限制?显然,GUI应用程序不在域中用于jshell解决方案或IDE替换:

超出范围的是图形界面和调试器支持.JShell API旨在允许IDE和其他工具中的JShell功能,但jshell工具并非旨在成为IDE.

维恩图或其他视觉效果的奖励积分.

当然,片段的大小应该是有限的.我更想问一下使用片段无法解决哪些问题.

也可以看看:

https://openjdk.java.net/jeps/222

https://openjdk.java.net/jeps/330

java scripting jvm system-administration jshell

16
推荐指数
2
解决办法
598
查看次数

jshell中的多行粘贴

我正在尝试使用jshell,但找不到粘贴多行表达式的选项.甚至可以在jshell中粘贴多行.与scala提供的类似paste mode.

java java-9 jshell

15
推荐指数
3
解决办法
1505
查看次数

如何将参数传递给jshell脚本?

我愿意将参数传递给jshell脚本.例如,我会喜欢这样的事情:

jshell myscript.jsh "some text"
Run Code Online (Sandbox Code Playgroud)

然后在脚本中的某个变量中提供字符串"some text".

但是,jshell只需要一个文件列表,因此答案是:

File 'some text' for 'jshell' is not found.
Run Code Online (Sandbox Code Playgroud)

有没有办法将参数正确传递给jshell脚本?

迄今为止的解决方法

到目前为止,我唯一的解决方案是在调用脚本时使用环境变量:

ARG="some test" jshell myscript.jsh
Run Code Online (Sandbox Code Playgroud)

然后我可以在脚本中访问它:

System.getenv().get("ARG")
Run Code Online (Sandbox Code Playgroud)

java-9 jshell

15
推荐指数
1
解决办法
956
查看次数

使用特定类名时 JShell 错误“意外类型”

我只是在玩 JShell,似乎定义class Z{}然后定义 var z = new Z()不起作用。但是使用不同的类名,比如class Xand class A,确实有效。

当然我一定遗漏了一些明显的东西......?

|  Welcome to JShell -- Version 14.0.1
|  For an introduction type: /help intro

jshell> class X{}
|  created class X

jshell> class Z{}
|  created class Z

jshell> var x = new X()
x ==> X@26a1ab54
|  created variable x : X

jshell> var z = new Z()
|  Error:
|  unexpected type
|    required: class
|    found:    type parameter Z …
Run Code Online (Sandbox Code Playgroud)

java jshell

15
推荐指数
1
解决办法
193
查看次数