Relative Content

Tag Archive for javagenerics

How to pass a concrete instance to a generic class with bounded wildcard?

TLDR; Why I cannot pass an implementation of an interface to a bounded wildcard initialised class to generically handle multiple payloads? Full question Let’s imagine you have to handle some JSON-payloads with a common wrapper structure around only differs in some attributes of a known structure. Something like: { “id”: “object-one”, “timestamp”: “…”, “payloadType”: “ConcreteClassA”, […]

Java Generics capture in Stream.toList()

I still have a point that I do not understand when working with java generics and lists. I will use here a Class example to keep it simple, but it applies to any generic type.

List class wrapped by Map class do not support generic types in JAVA?

public Map<Long, List<? extends ITest>> moo() { List<Test> a = List.of(new Test()); Map<Long, List<? extends ITest>> b = Map.of(1L, a); return b; } public Map<Long, List<? extends ITest>> koo() { List<Test> a = List.of(new Test()); Map<Long, List<Test>> b = Map.of(1L, a); return b; } public List<? extends ITest> too() { List<Test> a = List.of(new Test()); […]

inference variable has incompatible equality constraints

A class ServerServiceDefinition with generic types defined here. I’m trying to take an existing instance of this class, modify some properties and reconstruct another instance of a ServerServiceDefinition by calling the addMethod declared as

Why does the compiler allow me to add an object of type Pair to the Pair list?

I’m using the Pair class to store information about stadiums, i.e. name of the stadium and its capacity.
Let’s look at the first example. I create a list and fill it with instances of parameterized type Pair<String, Integer>(lines 1,2).If I explicitly create an instance of another parameterized type Pair<String, String>(line3), store it in a variable and try to add it to the list, the compiler throws an error, i.e. everything is as it should be(line 4). But if I remove lines 2,3 and create instance of Pair<String, String> directly in the add method(Second example) then the program is compiled and executed. Can anyone explain why the compiler did not throw an error?

Java bridge method

public class Pair<T> { private T first; private T second; public Pair(){ this(null, null); } public Pair(T first, T second){ this.first = first; this.second = second; } public T getFirst(){ return this.first; } public T getSecond(){ return this.second; } public void setFirst(T first){ this.first = first; } public void setSecond(T second){ this.second = second; } […]