問題タブ [java-9]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - Jdk9/java-9 での module-info.java コンパイル エラーの解決方法
jdk-9を使用して以下のコードを実行しようとしていますが、コマンドを使用してコンパイルすると問題に直面します
指示
エラー
モジュール情報.java
テスト.java
パッケージ構造は以下のようなものです
JDK バージョン
java - Gradle はデーモン無視フラグを無視します
3.2.1
でインストールされた MacOS X 10.12.1 でGradle を実行brew install gradle
していますが、env 変数などを自分で設定せず、Java 9 EA を使用しようとしています。
しかし、ビルドは失敗しています
FAILURE: ビルドは例外で失敗しました。
- 問題: デーモン プロセスを開始できません。この問題は、デーモンの構成が正しくないことが原因である可能性があります。たとえば、認識されない jvm オプションが使用されています。
私が知っていることから、デーモンが maxpermsize JVM オプションを使用しようとしているため失敗します (これは Java 8+ ではサポートされていませんが、Java 8 では警告のみです)。
だから私はデーモンを無効にしようとしました:
しかしgradle build
、まだデーモンを起動しようとしています...プロジェクトディレクトリにある~/.gradle
とを削除しました。.gradle
他のアイデアはありますか?
java - Javadoc は Java 9 でのモジュールの可視性をどのように扱っていますか?
Javadoc ツールは、アクセシビリティ修飾子に基づいてドキュメントを生成します。デフォルトでは、すべてpublic
のprotected
クラス、フィールド、およびメソッドが文書化されます。これは、次のオプションで変更できます。
-public
public クラスとメンバーだけを表示します。-protected 保護
された public クラスとメンバーのみを表示します。これがデフォルトです。-package
パッケージ、保護、およびパブリック クラスとメンバーのみを表示します。-private
すべてのクラスとメンバーを表示します。
Java 9 はモジュールの概念を導入し、プロジェクト Jigsaw はそれを既存の JDK に適用します。Mark Reinholdによる講演(モジュールに関する一連の講演の 3 番目) は、モジュールの可視性 ( 経由)に応じて、モディファイヤがどのようpublic
に異なるレベルのアクセシビリティを持っているかを示しています。exports
- みんなに公開
- パブリックだが特定のモジュールのみ
- モジュール内でのみ公開
現在、すべてのパブリック メンバーにアクセスできるわけではないため、同じ Javadoc 生成スキームを使用し続けることはあまり意味がありません。「十分な」レベルで公開されているメンバーのみを文書化する必要があります。
Javadoc モジュールは認識されますか? 追加の露出レイヤーを処理するために、上記のものに加えてコマンド オプションはありますか? 特定のモジュールにのみ公開されているパブリック メンバーの場合、Javadoc には次のようにリストされていますか?
?
java - JDK 9 は、オーバーライドされたメソッドで最終フィールドが参照される Lambda 式のインスタンス化を許可すべきではありませんか?
私は新しい Eclipse Neon で作業しており、コードの一部ですぐにエラーが発生し始めました。
これは最初は奇妙に思えましたが、ここで Neon ECJ (Eclipse Java Compiler) が JDK 9 初期リリース コンパイラの姿勢を採用していることに気付きました。
そのリンクにあるのと同じ問題は発生しませんが、ここで説明する別の問題が発生します。
フィールドとしてのラムダ式宣言に関する問題
これは、Eclipse Neon、JDK 9コンパイラ、および JDK 8 コンパイラ (Eclipse の以前のバージョンではありません) でコンパイル エラーが発生するテスト クラスです。
上記のコードの場合、4 行目のエラーは次のsuffix
とおりです。
宣言の前にsuffix
フィールド宣言を移動すると、同じクラスで何が起こるかを見てみましょう。
addSuffix
上記のコードの場合、6 行目のエラーは次のsuffix
とおりです。
Java 9 はこのように動作する必要がありますか?
これは JDK 8 では問題なく機能しました。突然強制するのは奇妙なことのようです。特に、最終フィールドが正しくインスタンス化されていることを確認するためのコンパイル時のチェックが既に行われていることを考慮してください。
したがって、関数addSuffix
がアクセスされるまでに、値が所定の位置にある必要がありますsuffix
(null
そうでない場合は別の話です)。
また、JDK9 および ECJ で正常にコンパイルされる次のコードを試したことにも注意してください。
JDK 9 では、匿名クラス宣言と Lambda 式の間に大きな違いがあるようです。したがって、コンパイラ エラーが発生した場合、少なくとも ECJ は JDK 9 コンパイラを正確に模倣しています。
ストリームとジェネリックの問題
コード内の Generic が示すものとは異なる方法でコンパイラがこれを解釈する理由が思いつかないため、これには本当に驚きました。
このコードでは、次のエラーが発生します。
この情報に照らして、この場合、JDK 9 を適切に模倣していないことは ECJ に問題があり、単なる Eclipse のバグであることがわかります。
java - JShell - このクラスを置き換えずに既存のクラスにメソッドを追加する方法は?
tl;dr : このクラスを置き換えずに既存のクラスにメソッドを追加する方法は?
説明:
JShellで次のコマンドを実行すると:
次の出力が出力されます。
このコマンドをもう一度実行すると、次の出力が得られます。
以下のように、1 つのメソッドでクラスを作成しましょう。
出力が以前のクラスの上書きとは少し異なることに注意してください。
実行testMethod1
は正常に終了しIn testMethod1
、コンソールに出力されます。
TestClass
を失うことなく、既存のメソッドに新しいメソッドを追加したいと思いtestMethod1
ます。したがって、次のスニペットを実行します。
...そしてtestMethod1
、全体TestClass
が置き換えられているため、失われています。
上書きせずに既存のクラスに新しいメソッドを追加するにはどうすればよいですか? 10 個のメソッドを書いたらどうなるでしょうか。クラスに追加したい新しいメソッドの隣に既存のメソッドを書き留めるべきですか? JShell は、警告の形で、置き換えられるクラスについてユーザーにプロンプトを出すべきではありませんか?
ヒントやヘルプをいただければ幸いです。
java - Docker および Java 9 モジュール
特定の Java 9 モジュール用の Docker イメージはありますか?
の基本イメージが表示されるはずですがFROM java:9
、私の基本が最小限のコア Java 9 モジュールからのものである場合、オプションのモジュールはどのように来るのでしょうか。
reactive-programming - リアクティブ ストリーム SubmissionPublisher からアイテムを受け取る
私は Java 9 の新機能のいくつかを試していました。そこで、特定のレートで数値を発行するパブリッシャーを用意するためのテストをまとめました。また、これらのパブリケーションをリッスンしてコンソールに出力するためのサブスクライバーも実装しました。
onNext()
メソッドは何も出力せず、getLastItem()
0 しか返さないため、この Api の使用方法を完全には理解していない可能性があります。
機能しているように見える唯一の部分は、変数onSubscribe()
を正しく初期化する部分です。lastItem
誰かが私のテストで何が間違っているのか教えてもらえますか? テストがこれらの数字を出力し、最後の項目として 5 を返すことを期待します。
Observables と Subjects は Angular2 でのみ使用していると言わざるを得ませんが、理解しやすいようです。
java - Java 9 ea では、Eclipse がインストールに失敗し、「エラーが発生しました。ログ ファイルが null であることを確認してください」というエラーが表示されます。
この問題が何度も発生することは知っていますが、私と同じような状況を見つけました。
Eclipse インストーラーをクリックするたびに、プロンプトが表示されます。エラーが発生しました。ログ ファイルが null であることを確認してください。Eclipseをインストールすることさえできません。
問題は「JDK 9-ea」によるものだと思いますので、jdk 9-ea をアンインストールして jdk8 を使用する予定ですが、この問題を直接解決するのを手伝ってくれるかもしれません、ありがとう!
ant - ant 起動コマンドに長い JVM オプションを追加する
この質問と同様に--long-option myVal
、ant が使用する JVM に長いオプション (つまり) を提供する方法を探しています。ただし、これらのJVMオプションをantプロセス自体に指定したいので、antが作成するサブプロセス(例<java>
)ではなく、私の質問は異なります。
具体的には--add-modules java.se.ee
、ビルド スクリプトによって実行される Ant タスクが JAXB クラスにアクセスできるように指定する必要があります。
私がこれまでに試したこと:
オプションについては、次-propertyfile
の内容を試しjava9.properties
ました:
また、別の行にキーと値があります。
java - Java 9でVarHandleを使用する正しい方法は?
Java 9 のいくつかの新機能の調査に多くの時間を費やしてきましたが、有用で実用的な例は見つかりませんでした。
VarHandleを作成する次のコード スニペットを検討してください。
しかし、次は何ですか?つまり、この変数ハンドルの使用方法は? 実際の例を教えてください。