java - 将包私有(private)类导入 JShell

标签 java package private java-9 jshell

在 Java 9 发布后,我一直在玩 JShell,我尝试导入我制作的包。由于我为其编码的整个应用程序将包含在该包中,因此除了一个类(我还没有编码)之外的每个类都是包私有(private)的。我的类路径是正确的,但我仍然无法在 JShell 中使用包中声明的任何类型(它会引发“找不到符号”错误)。 我是否需要公开它们以便访问它们,或者有什么方法可以测试包私有(private)类?这是我试过的确切代码。

我的当前目录是

C:\Users\Sylvaenn\OneDrive\Documents\Programs\Java\src

我的类路径是

C:\Users\Sylvaenn\OneDrive\Documents\Programs\Java\cls

包目录(用于字节码)是

C:\Users\Sylvaenn\OneDrive\Documents\Programs\Java\cls\collatz

Collat​​zSequence 是包含在 collat​​z 中的包私有(private)类。

PS C:\Users\Sylvaenn> cd OneDrive\Documents\Programs\Java\src
PS C:\Users\Sylvaenn\OneDrive\Documents\Programs\Java\src> jshell
|  Welcome to JShell -- Version 9
|  For an introduction type: /help intro

jshell> import collatz.*;

jshell> CollatzSequence seq = new CollatzSequence(BigInteger.ONE);
|  Error:
|  cannot find symbol
|    symbol:   class CollatzSequence
|  CollatzSequence seq = new CollatzSequence(BigInteger.ONE);
|  ^-------------^
|  Error:
|  cannot find symbol
|    symbol:   class CollatzSequence
|  CollatzSequence seq = new CollatzSequence(BigInteger.ONE);
|                            ^-------------^

jshell> /imports
|    import java.io.*
|    import java.math.*
|    import java.net.*
|    import java.nio.file.*
|    import java.util.*
|    import java.util.concurrent.*
|    import java.util.function.*
|    import java.util.prefs.*
|    import java.util.regex.*
|    import java.util.stream.*
|    import collatz.*

jshell>

最佳答案

来自 JEP#220 - The Java Shell (Read-Eval-Print Loop)

A snippet may not declare a package or a module. All JShell code is placed in a single package in an unnamed module. The name of the package is controlled by JShell.

这可能就是您无法在 JShell 中声明 package 的原因。


作为tool documentation建议尽管您可以尝试一下:-

The default startup script consists of several common imports. You can personalize your startup entries with the /set start command.

在哪里可以 set the classpaththe modulepath您将使用的类(class):

jshell --class-path C:\Users\Sylvaenn\OneDrive\Documents\Programs\Java\cls

关于java - 将包私有(private)类导入 JShell,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46393151/

相关文章:

从 child 访问 PHP 私有(private)变量

javascript - 如何使用 moment.js 将纪元时间转换为 ISO 8601

java - 在异常映射器中检索请求正文

java - 线程 "main"java.lang.NoSuchMethodError : <method> 中的 JNI GetMethodID 异常

java - 错误:(46,0)在org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler_Decorated@1e88544b上找不到属性 'compile'

Python 错误 : OSError: [WinError 193] %1 is not a valid Win32 application

java - 自动导入哪些 Java 类/包?

ios - 如果实现类标记为私有(private),则不调用委托(delegate)方法?

C++ - 类中的私有(private)变量

java - Spring MVC + Log4j2 在未识别的类路径位置中定义 log4j2.properties 文件