私は次のドメインモデルを持っているとしましょう。コンパイラ警告なしでジェネリッククラスを再利用する方法
その後public abstract class JsonSerializer<T> {
public abstract JsonElement toJsonElement(final T object, final Locale locale);
public JsonArray toJsonArray(final Collection<T> objects, final Locale locale) {
return objects.stream().map(t -> toJsonElement(t, locale)).collect(JsonArray::new, JsonArray::add, JsonArray::addAll);
}
}
public class FruitJsonSerializer<T extends Fruit> implements JsonSerializer<T> {}
public abstract class Fruit {}
public class Banana extends Fruit {}
public class Apple extends Fruit {}
、私はどんな果物をシリアル化したい場合、私は:
FruitJsonSerializer serializer = new FruitJsonSerializer();
serializer.toJsonElement(new Banana());
serializer.toJsonElement(new Apple());
をしかし、私はそれはのメンバーとして「toJsonElement」に未チェックの呼び出しであることを言って、コンパイラから警告を受けます生の種類。
実装ごとに1つのシリアライザ宣言(FruitJsonSerializer<Apple>
、FruitJsonSerializer<Banana>
など)を使用せずにこの警告を回避するにはどうすればよいですか?
「JsonSerializer」についてはどうですか? –
daniu
toJsonElementは、バナナなどのコレクションと互換性のないFruitのコレクションを期待しているためコンパイルされません – ecampolo