私はJavaのジェネリックスには新しく、Java 8 groupingBy
を使用すると問題があります。私は次のインタフェースを持っているツイートのコンテナ実装する必要がJava 8のグループ化一般的なコレクションについて
:適切にここでhashcode
、equals
など
を実装して
public interface TweetsContainer<T extends Tweet> extends Iterable<T>, Serializable {
...
Map<String, Collection<T>> groupByLang();
...
}
Tweet
は自分のクラスでメソッドを実装する私の試みですgroupByLang
:
public class LinkedListTweetsContainer<T extends Tweet> implements TweetsContainer<T> {
private final List<T> tweets;
...
@Override
public Map<String, Collection<T>> groupByLang() {
Map<String, Collection<T>> res =
tweets.stream().collect(Collectors.groupingBy(T::getLang));
return res;
}
...
}
ただし、エラーは0
public class Tweet implements Serializable {
...
public String getLang() { return lang; }
...
}
エラーは、私が間違ってやっている何を意味してん:言っ、
Error:(51, 36) java: incompatible types: inference variable R has incompatible bounds
equality constraints: java.util.Map<java.lang.String,java.util.List<T>>
upper bounds: java.util.Map<java.lang.String,java.util.Collection<T>>,java.lang.Object
Tweet
クラスは、パブリックメソッドgetStringID
を持っていますか?
更新
@Radiodef、あなたの答えのおかげで、私は少し深い疑問を掘り下げてみたかったです。リストはコレクションですね。私は用語共分散を知っています - クラスA、B、BがAを持つとき、継承についてはGenericClass<A>
とGenericClass<B>
です。ここでは逆の状況があります:同じパラメータ化された型ですが、異なる(ネストされた)汎用クラスです。この場合のJavaルールとは何か、または自分でそれについて読んでみたい場合は、どのキーワード/用語を覚えておく必要がありますか?