下位ワイルドカードが存在する理由の1つは、新しい要素を追加するときにコレクションが不変ではないということです。下界ワイルドカードJava - メソッドへのアクセス
など。
私は数値の長い値を取得しようとしたため、以下はコンパイルされません。
1:どのような方法を使用できますか? は、私は現在のストリームについて学んでいますし、書籍には、次のストリーム方法を指定:
Optional<T> min(Comparator<? super T> comparator)
そして道具を唯一の方法?:
public void testLowerBounds(List<? super Number> numbers){
if (!numbers.isEmpty()){
System.out.println(numbers.get(0).longValue());//Does not compile
}
}
私の質問は、約来てどのようにオブジェクトそれは次の通りです:
Stream<String> s = Stream.of("monkey", "ape", "bonobo");
Optional<String> min = s.min((s1, s2) -> s1.length()—s2.length());
Q2:コンパレータは、文字列メソッドの使用時にどのように文字列メソッドを使用できますか?
私はQ2に答えなければならなかった:オプションは "あなたにジェネリックタイプ" String "を持つComparatorの実装を渡すか、" String "を実装するものを指定しなければならないと言います。この?
はあなたの応答を楽しみにしています。すべての
これらは2つの異なる質問であるようです。最初の前提として、コンパイラがリストに追加することを妨げると、リストが不変であるという意味ではありません。コンパイラは、単に言語の静的型チェックの規則に従っています。 – manouti
また、 'List'には' longValue() 'メソッドがありません。 – manouti
こんにちはAR.3フィードバックに感謝します。私はあなたが正しいように質問を変更した、私は内容の代わりにリストメソッドをチェックしていた。彼らは確かに2つの異なる質問です、私はちょうど質問の起源を説明したかった。私は、不変についてあなたが言っていることを得るが、コンパイラはあなたがリストに追加させないので、今は論理的に不変である。どちらの質問にも答えがありますか? –