2017-09-24 13 views
4

私はJava 9リリースの後にJShellで遊んでいましたが、私が作ったパッケージをインポートしようとしました。私がそれをコーディングしているアプリケーション全体がそのパッケージに含まれているので、すべてのクラス(ただしまだコード化していないクラス)はパッケージプライベートです。私のクラスパスは正しいですが、私はまだJShellのパッケージで宣言されている型のどれも使用できません( "シンボルを見つけることができません"というエラー)。 アクセスできるように公開する必要がありますか、またはパッケージプライベートクラスをテストできる方法がありますか?ここで私が試した正確なコードです。JShellにパッケージプライベートクラスをインポートする

私の現在のディレクトリがある

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 

CollatzSequenceはパッケージ - ですに含まれるプライベートクラス。

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> 
+2

はあなたがシナリオの再現性のあるコードを共有してもらえましたか?それは疑問を明確にするのに役立ちます。 – nullpointer

+1

私は編集にそれを含めました。 –

答えて

1

限り私は(私が間違っているなら、私を修正)知っているとして、あなたはJShellを(JShell以内に作成されたクラスは、デフォルトのパッケージに常にある)を使用して、特定のパッケージでクラスを作成することはできません。

つまり、JShell内からプライベートクラスにアクセスすることはできません。これは「通常の」Javaの動作です。

+0

特定のパッケージにクラスを作成することに関して、私はJShellコマンドでこれを行う方法を見つけることができませんでした。そうでないとそうすることができないと思っていますが、わかりません。パッケージプライベートクラスにもアクセスできないと思うのですが、それは理にかなっていますが、大きな失望です。 –

2

JEP位220から - The Java Shell (Read-Eval-Print Loop)

スニペットは、パッケージまたはモジュールを宣言しなくてもよいです。すべてのJShellコードは、無名モジュールの単一パッケージに入れられた です。 パッケージの名前はJShellによって制御されます。

おそらく、あなたはpackageをJShell内で宣言できない理由があります。


あなたはこれを試してみることができますがtool documentationの通り: -

デフォルトの起動スクリプトは、いくつかの一般的な輸入品から構成されています。 /set startコマンドを使用して、スタートアップエントリをパーソナライズすることができます。

どこすることができますset the classpathまたはあなたが使用するだろうクラスのthe modulepath

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

非常に有益な情報ですが、私は新しいパッケージを宣言しようとしていません。私は既存のパッケージプライベートクラスにアクセスしようとしています。私のクラスパスはすでに正しいディレクトリを指していますが、明示的にシェルで設定しようとします。しかし、私は受け入れられた答えが正しいと思います。パブリッククラスのみがJShellからアクセスできます。 –

関連する問題