問題タブ [java-8]
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 - 「Apache Harmony を使用する理由」または「Android で Java 8 を使用する方法」
私たちのほとんどは、Java 8 がもたらすクールな機能について聞いたことがあるかもしれませんが、Android はそれをサポートしていません。これは、Googleが Android 用のApache Harmonyを使用しているためです。これが、私たち (Android アプリの開発者) が、ラムダ、インターフェイスのデフォルト実装、文字列の切り替えなどを使用してコードを改善することを妨げているものです。確かに、しばらくは対処しますが、アプリで使用する一部のライブラリが Java 8 機能を使用し始めたらどうなるでしょうか? 私の知る限り、これは機能しません (間違っている場合は修正してください)。これにより、標準のJava とAndroidの Java の間に互換性がなくなります。それは Google の意図するものではありませんし、少なくとも、広く採用されているオペレーティング システムを開発している企業が、永久にそのオペレーティング システムにとどまりたくない理由が思いつきません。古いJava バージョン。
質問:
- Apache Harmony を使用する理由
- 新しいバージョンの Java を採用できないのはなぜですか?
- 彼らが Oracle の Java を必要としないのであれば、OpenJDKのサブセットを使用できないのはなぜですか (ライセンス noob here)。
- 使用している Java のバージョンを更新する予定はありますか?
- 現在の Android システムで Java 8 クラスを使用する方法を知っていますか?
java - Java8 でのラムダの導入によって変更または影響を受ける GoF 設計パターンはどれですか?
多くの人が、GoF 設計パターンの大部分は、ファースト クラス関数が存在しないための回避策にすぎないと主張しています。Java がラムダ式を取得しようとしている今、これらのパターンのどれがそれらの影響を受けるでしょうか? 劇的に単純化または一般化できるものはどれですか? そして、どれが基本的に同じままですか? 実用的な例は大歓迎です。
java - Java 8 拡張メソッド - mixin または trait と呼ばれないのはなぜですか?
私の知る限り、Groovy には既に mixin があり、Scala には trait があります。C ファミリーには多重継承があります。では、なぜ Java の新しい機能が「拡張メソッド」と呼ばれるのでしょうか。同じものの名前が違うだけなのか、それとも別の理由があったのか。トレイトやミックスインとの違いは何ですか? 彼らは何を追加し、何を欠いているのでしょうか?
個人的には、それらを「拡張メソッド」というよりも「実装メソッド」と見なしています。
java - null 値の jdk8 ストリームをどのように管理する必要がありますか
in advance
JDK8 はまだリリースされていないため (とにかく今のところはそうではありません..)、この件名は少し難しいかもしれませんが、Lambda 式に関するいくつかの記事、特に Stream として知られる新しいコレクション API に関連する部分を読んでいました。
以下は、Java Magazine の記事に記載されている例です (これはカワウソ個体群アルゴリズムです..):
私の質問は、セットの内部反復の途中で、カワウソの 1 つが null の場合はどうなるかということです。
NullPointerException がスローされることを期待しますが、以前の開発パラダイム (非機能) にまだとどまっている可能性があります。
これが実際に NullPointerException をスローする場合、この機能は非常に危険であることがわかり、以下のようにのみ使用する必要があります。
- null 値がないことを確認する開発者 (おそらく以前の .filter(o -> o != null) を使用)
- 開発者は、アプリケーションが null otter または処理する特別な NullOtter オブジェクトを生成しないようにします。
最良の選択肢、または他の選択肢は何ですか?
java - Java 8でメソッド参照を間接的に実行する方法は?
一般的な質問は次のとおりです。
- 構文を使用する場合、関数型インターフェイス
object::aMethod
などの型に変換できますか?MethodHandle
- いいえの場合、可能であればJava 8でメソッド参照を間接的に呼び出すにはどうすればよいですか?
例として、次のようにしたいとしますMethodRefRunner
。
また、次のように使用できます。MethodRefRunner.execute(o, o::someMethod, someParam)
上記のスニペットでWHATTYPE
は、 のオプションの 1 つjava.util.function.Function
が非常に限定的です。この回答が言及しているように、バージョン b75 より前では、java.util.function.Block
が利用可能であり、便利な場合があります。
一方でWHATTYPE
、何らかの形で ? に変換される可能性はありjava.lang.invoke.MethodHandle
ますか?
Java の専門家への注意: 必要に応じて質問のタイトルを変更してください。
java - Java 8 はクロージャをサポートしていますか?
よくわかりません。Java 8 が石器時代から出現し、ラムダ/クロージャのサポートを開始すると思っていました。しかし、私がこれを試すと:
…と書いてありnumber should be effectively final
ます。それは、閉鎖ではないと思います。それは、参照ではなく値によって環境をコピーしているように聞こえます。
ボーナス質問!
Android は Java 8 機能をサポートしますか?