問題タブ [java-16]

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.

0 投票する
2 に答える
1725 参照

java - Java レコードの標準コンストラクターが、レコード レベルよりも制限的なアクセスを持たないのはなぜですか?

特定のタイプのレコード インスタンスを、同じパッケージ内の別のクラスのファクトリ メソッドを使用してのみ作成できるようにしたい状況があります。その理由は、レコードを作成する前に、かなりの量の検証を実行する必要があるためです。

レコードは、検証されたフィールドのダム データ キャリアになることを意図していますが、実際に検証を実行するにはいくつかの精巧なバリデーター オブジェクトにアクセスする必要があるため、レコードのコンストラクターで検証を行うことはできません。

バリデータ オブジェクトをレコード コンストラクターに渡すことは、それらがレコード状態の一部を形成することを意味するため、レコード コンストラクターを使用してレコードの検証を実行できないことを意味します。

そこで、検証を独自のファクトリに抽出し、次のようなコードを作成しました (ファクトリ クラスと同じパッケージ内のレコード)。

なんらかの理由で、上記はIntelliJの不平では機能しません:

通常のクラス (単一のパッケージ プライベート コンストラクターを許可する) を使用することで問題を回避できますが、データをレコードとしてより正確にモデル化したいと考えています。

この制限がレコードに存在するのはなぜですか? 今後、この制限を撤廃する予定はありますか?

0 投票する
2 に答える
6334 参照

java - Java 16 の Stream.toList() と Stream.collect(Collectors.toList()) の違いは?

JDK 16 には、インスタンスtoList()に直接メソッドStreamが含まれるようになりました。以前の Java バージョンでは、常にcollectメソッドを使用してCollectorインスタンスを提供する必要がありました。

新しい方法では、入力する文字数が明らかに少なくなります。どちらの方法も交換可能ですか、それとも注意すべき微妙な違いはありますか?

(この質問は、Stream.toList() が Collectors.toList() よりも優れたパフォーマンスを発揮するかどうかに似ていますが、パフォーマンスではなく(のみ)動作に焦点を当てています。)

0 投票する
3 に答える
2320 参照

java - Java 16 で IndexOutOfBoundsException に長いインデックスを持つコンストラクターがパラメーターとして含まれるようになったのはなぜですか?

JDK 16 でのIndexOutOfBoundsExceptionの実装をチェックしていたところ、longインデックスを持つ新しいコンストラクターが導入されていることに気付きました。

私の知る限り、配列インデックスは通常int値であり、これは言語仕様セクション §10.4で確認されています。

int配列は値でインデックス付けする必要があります。shortbyte、またはchar値は、単項数値昇格 (§5.6) を受けて値になるため、インデックス値としても使用できintます。

longインデックス値を使用して配列コンポーネントにアクセスしようとすると、コンパイル エラーが発生します。

longこのインデックスコンストラクターがいつ(そしてなぜ)使用されるのか考えていますか?