問題タブ [constructor-reference]
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 - 内部クラスのコンストラクタ参照が実行時に VerifyError で失敗する
lambda を使用して内部クラス コンストラクターのサプライヤーを作成していctx -> new SpectatorSwitcher(ctx)
ます。IntelliJ は、代わりに変更することを提案しましSpectatorSwitcher::new
た。SpectatorSwitcher は、私が作業しているクラスの非静的内部クラスです。提案されたコードは (maven を使用して) 正常にコンパイルされますが、実行時に次の VerifyError が発生します。
コンパイル中に javac / maven が失敗しないのに、無効なバイトコードを生成するのはなぜですか?
編集:問題は単純な呼び出しよりもはるかに複雑であるように見えます。これは、それを再現するために必要なコードです:
kotlin - Kotlin にコンストラクタ参照はありますか?
Java には、Class::new
コンストラクタ参照の構文があります。メソッドの呼び出し可能な参照があることは知っていますが、コンストラクターはどうですか? 私にとって典型的なユースケースは工場です。
java - Java 8 コンストラクター メソッドのリファレンス
私はJava 8の本を読んでいますが、私が再現したサンプルが付属しています:
実装者:
発信者:
これが呼び出された場合、以下が出力に出力されます。
すべて問題ありませんが、メソッド参照を使用すると、perform message
メソッドが出力されません! これはなぜですか、何か足りないのですか?
このコードを使用する場合:
またはこのコード:
これは印刷されます:
例外メッセージなどは出力されません。Java 8 1.8.25 64 ビットを使用しています。
アップデート
私のように勉強している読者にとって、これは正しい実行コードです。
呼び出し元のクラスを作成しました。
クラスコンストラクターにパラメーターとして渡す必要がある「アクション機能インターフェイスから実行する」空のメソッドを実装する必要があるため、MethodReference
「空のコンストラクターである MethodReferenceCall のコンストラクター」を参照し、それを使用できます。
java-8 - How do I use [TypeArguments] with a constructor reference in Java 8?
Section 15.13 of the Java Language Specification for Java 8 describes this form of the method reference syntax for creating a constructor reference:
For example:
That all works fine, but it seems that absolutely anything (excluding primitives) can be also supplied for the [TypeArguments] and everything still works:
Here's a silly example to prove the point:
A few questions arising:
[1] Since the String class doesn't even use generics, is it valid that the compiler allows the creation of that test2 constructor reference with those meaningless [TypeArguments]?
[2] What would be a meaningful example of using [TypeArguments] when creating a constructor reference?
[3] Under what conditions is it essential to specify [TypeArguments] when creating a constructor reference?
java - Java 8 は、メソッド参照のためにオンザフライでインターフェイスを実装できますか?
Java 8 の新機能について学びます。
私はさまざまな例で遊んでいますが、奇妙な動作を見つけました:
このコードは正常にコンパイルされますが、どのように機能するかわかりません。
Test::new
サプライヤーとして受け入れられるのはなぜですか?
サプライヤーのインターフェースは非常にシンプルに見えます:
java - デフォルト メソッドでの自動コンストラクタ マッチング
次のようなPersonFactory
インターフェイスがあります。
Person
クラス:
次のように s をインスタンス化できるようにしたいPerson
:
の署名を照合することにより、Java コンパイラに適切なコンストラクタを自動的に選択させる方法はありますPersonFactory.create()
か?
generics - 型パラメータをジェネリック クラス コンストラクタ参照に渡す方法は?
次のコードを想定します。
JavaFX プロパティ ( SimpleIntegerProperty
、SimpleStringProperty
、 ... およびSimpleObjectProperty<T>
) をジェネリック クラス コンストラクターの() -> Property<T>
引数に渡す::SimpleIntegerProperty
ことで、これに::SimpleObjectProperty
遭遇しました。
ここでコンパイラを改善したり、型パラメータをコンストラクタ/関数参照に渡すことができるようにすることは可能ですか? ここで単純なラムダ式に対してコンストラクター参照を使用することは理にかなっていますか? コンパイル方法は異なりますか?