問題タブ [java-11]
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 - JDK 11 を使用して Collection.toArray() にジェネレーター関数を提供するにはどうすればよいですか?
JDK 11 ( https://marketplace.eclipse.org/content/java- 11-support-eclipse-photon-49 )。正常に動作しているようです (バージョン: 4.9 ビルド ID: I20180801-2000)。
JDK 11 ではtoArray()
、Java.util.Collectionにメソッドの新しいオーバーライドがあります。
これはデフォルトのメソッドですが、オーバーライドされません。提供されたジェネレーター関数 (ハードコーディングされたゼロの引数を使用) によって返された値を別のオーバーライドに渡し、toArray()
コレクションの内容を配列として返すだけです。
そのメソッドの Javadoc で説明されているように、次のように呼び出すことができます。
これは正常に機能し、 に対応する適切な長さの文字列の配列Collection<String>
が返されます。
Javadoc には、「デフォルトの実装ではジェネレーター関数がゼロで呼び出され、結果の配列が toArray(T[]) に渡される」とも記載されています。
独自のジェネレーター関数を提供すると、(println()
コンソール出力に示されているように) 呼び出されますが、そのapply()
メソッドの戻り値は無視されるようです。toArray(String[]::new)
ジェネレーター関数によって返される配列の内容に関係なく、呼び出したようです。
MCVE は次のとおりです。
MCVE を実行して生成されるコンソール出力は次のとおりです。
array1: [This, is, a, list, of, strings]
intFunc: sz: 0
intFunc: 返される配列: [A, B, C]
array2: [This, is, a, list, of, strings]
intFunc: sz: 4
intFunc: 返される配列: [A, B, C, D]
array3: [This, is, a, list, of, strings]
出力は、ジェネレーター関数が何をするかは問題ではないことを示しています - それが返す配列は使用されていません。
私の質問は、ジェネレーター関数によって返された配列を使用するためにこの新しい実装を取得するにはどうすればよいですかtoArray()
、それとも不可能なことを試みていますか?
コメントと Nicolai からの回答に基づいて更新します。
サンプル コードの問題は、ジェネレーターではなく、テスト ケースにありました。たまたまジェネレーターがコレクションよりも少ない要素の配列を返す原因となったため、代わりに新しい配列が割り当てられ、コレクション内の要素の数を正確に保持しました。
コレクションより大きい配列を返すテスト ケースは、期待どおりに機能します。たとえば、このコード:
次のコンソール出力が得られます。
intFunc: sz: 9
intFunc: 返される配列: [A, B, C, D, E, F, G, H, I]
array4: [This, is, a, list, of, strings, null, H, I]
SO の質問Collections emptyList/singleton/singletonList/List/Set toArrayは、返された配列内に null 値がある理由を説明しています。
java - Maven JavaDoc プラグインが XML の解析に失敗する
maven-javadoc-plugin とカスタムドックレットを使用して Javadoc を生成しようとしています。私は JDK 11 を使用しており、Doclet インターフェイスのメソッドを実装しています。ただし、メソッドの 1 つで、XML ファイルを非整列化しようとしています。次のエラーが表示されます。
javax.xml.bind.JAXBException: JAXB-API の実装がモジュール パスまたはクラスパスに見つかりませんでした。
次のように javadoc-plugin を構成しました。
この問題を解決するにはどうすればよいですか?
maven - Java11 / JavaFX および Maven は NetBeans IDE 9 の外では実行されません
アクティブなJDKに見つからないJavaFXデプロイメントライブラリによると
José Pereda Maven アプローチを使用し、NetBeans でうまく動作しますが、「java -jar mavenproject1-1.0-SNAPSHOT-jar-with-dependencies.jar」を使用して外部で実行しようとするとすぐに、
「エラー: JavaFX」というエラーが表示されます。ランタイム コンポーネントが不足しており、このアプリケーションを実行するために必要です」
「md.mavenproject1.MainApp」は、これを理解しようとしている間の単なる一時的な名前です。
私のpomファイルは次のようになります:
私の nbactions.xml ファイルは次のようになります。
JavaFXの変更により、高校のプログラミングの子供たちをantからmavenに切り替えることを考えているので、あなたが私に与えることができるどんな助けも大いに役立ちますが、彼らはそこにあるプログラムを家に持ち帰って使用できるようにしたいと考えています。システムで OpenJDK 11 を実行しています。
**編集**
プログラムを実行する行を次のように変更しました。
そして今、私は得る:
私はローカルjdkを使用する必要がないmavenの依存関係を使用しています。誰でもできる助けは本当に役に立ちます。依存関係を取り除き、プログラムをOracle Java 10 jdkを使用してnetbeansの外部で実行すると、Java 11では内部でのみ実行されます。助けてください。
** 編集 **
pom ファイルを編集して以下を削除します。代わりに次を使用します。
ダウンロードした SDK を使用する代わりに、追加した付属の JavaFX ライブラリを使用するように起動行を変更できるようになりました。
ローカルのものを使用する代わりに、jre を含めたいと思います。誰かがそれがどのように素晴らしいか考えているなら.
java - Java 11でJavaFXランタイムをEclipseに追加するには?
Java 11 が最新バージョンの一部として JavaFX を除外したため、次のエラーが発生します。
では、Java 11 で JavaFX を Eclipse に追加するにはどうすればよいでしょうか? ありがとう。
java - Java 互換コンパイル モード
次の難問に直面しています。現在、32 ビットと 64 ビットの両方の Windows マシンに Java 8 アプリケーションをデプロイしています。
Java 8 が EoL に近づいているため、次に何をすべきかという非常に難しい問題に直面し始めています。
Oracle は新しい Java バージョンの 32 ビット バージョンを提供しないため、8 の EoL よりもさらに先をサポートすることを約束しているように見える OpenJDK の製品に移行することによって、私は今のところ 8 に固執する必要があります。このため、VM として OpenJ9 (32 ビット バージョンを提供) にも移行します。
私の質問は次のとおりです。Java 11 への移行を検討し始めています。その jdk を使用して互換モードでコンパイルし、11 固有の機能を使用しないという犠牲を払ってバージョン 8 をターゲットにすることは可能でしょうか?
また、コンパイルされたコードは、互換性を持ってコンパイルされ、32 ビットで実行されている環境にデプロイされた Java 11 コードのような組み合わせで正しく実行できますか?
また、Java 11 の互換性サポートとは何だろうと思っていました。
java - Java http クライアントで「ホスト」ヘッダーをカスタマイズする方法
これが私のコードです:
その結果、上記のコードが送信することがわかります。
ご覧のとおり、2 つのヘッダー (URI からのヘッダーと指定したヘッダー) を送信しますが、URI からのヘッダーではなく、指定したヘッダーHost
を送信したいと考えています。Host
このクライアントで可能ですか?
編集:Java 11では、さらに悪化します(client.send行を:に変更する必要がありますclient.send(request, HttpResponse.BodyHandlers.ofString());
):
そのヘッダーをカスタマイズするにはどうすればよいですか (仮想ホストのテストに必要)?
私も試してみましたがsetHeader
、まったく同じ問題が発生しました(ダブルHost
ヘッダーまたは例外のいずれか)。
編集: JDK のバグを報告しました。