Skip to content

Commit ca93498

Browse files
authored
Merge pull request #6712 from Doha2012/master
add generic constructor examples
2 parents 2be225b + 532c5f2 commit ca93498

File tree

6 files changed

+256
-0
lines changed

6 files changed

+256
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package com.baeldung.generics;
2+
3+
import java.io.Serializable;
4+
5+
public class Entry {
6+
private String data;
7+
private int rank;
8+
9+
// non-generic constructor
10+
public Entry(String data, int rank) {
11+
this.data = data;
12+
this.rank = rank;
13+
}
14+
15+
// generic constructor
16+
public <E extends Rankable & Serializable> Entry(E element) {
17+
this.data = element.toString();
18+
this.rank = element.getRank();
19+
}
20+
21+
// getters and setters
22+
public String getData() {
23+
return data;
24+
}
25+
26+
public void setData(String data) {
27+
this.data = data;
28+
}
29+
30+
public int getRank() {
31+
return rank;
32+
}
33+
34+
public void setRank(int rank) {
35+
this.rank = rank;
36+
}
37+
38+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
package com.baeldung.generics;
2+
3+
import java.io.Serializable;
4+
import java.util.Optional;
5+
6+
public class GenericEntry<T> {
7+
private T data;
8+
private int rank;
9+
10+
// non-generic constructor
11+
public GenericEntry(int rank) {
12+
this.rank = rank;
13+
}
14+
15+
// generic constructor
16+
public GenericEntry(T data, int rank) {
17+
this.data = data;
18+
this.rank = rank;
19+
}
20+
21+
// generic constructor with different type
22+
public <E extends Rankable & Serializable> GenericEntry(E element) {
23+
this.data = (T) element;
24+
this.rank = element.getRank();
25+
}
26+
27+
// generic constructor with different type and wild card
28+
public GenericEntry(Optional<? extends Rankable> optional) {
29+
if (optional.isPresent()) {
30+
this.data = (T) optional.get();
31+
this.rank = optional.get()
32+
.getRank();
33+
}
34+
}
35+
36+
// getters and setters
37+
public T getData() {
38+
return data;
39+
}
40+
41+
public void setData(T data) {
42+
this.data = data;
43+
}
44+
45+
public int getRank() {
46+
return rank;
47+
}
48+
49+
public void setRank(int rank) {
50+
this.rank = rank;
51+
}
52+
53+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package com.baeldung.generics;
2+
3+
public class MapEntry<K, V> {
4+
private K key;
5+
private V value;
6+
7+
public MapEntry() {
8+
super();
9+
}
10+
11+
// generic constructor with two parameters
12+
public MapEntry(K key, V value) {
13+
this.key = key;
14+
this.value = value;
15+
}
16+
17+
// getters and setters
18+
public K getKey() {
19+
return key;
20+
}
21+
22+
public void setKey(K key) {
23+
this.key = key;
24+
}
25+
26+
public V getValue() {
27+
return value;
28+
}
29+
30+
public void setValue(V value) {
31+
this.value = value;
32+
}
33+
34+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
package com.baeldung.generics;
2+
3+
import java.io.Serializable;
4+
5+
public class Product implements Rankable, Serializable {
6+
private String name;
7+
private double price;
8+
private int sales;
9+
10+
public Product(String name, double price) {
11+
this.name = name;
12+
this.price = price;
13+
}
14+
15+
@Override
16+
public int getRank() {
17+
return sales;
18+
}
19+
20+
@Override
21+
public String toString() {
22+
return "Product [name=" + name + ", price=" + price + ", sales=" + sales + "]";
23+
}
24+
25+
// getters and setters
26+
public String getName() {
27+
return name;
28+
}
29+
30+
public void setName(String name) {
31+
this.name = name;
32+
}
33+
34+
public double getPrice() {
35+
return price;
36+
}
37+
38+
public void setPrice(double price) {
39+
this.price = price;
40+
}
41+
42+
public int getSales() {
43+
return sales;
44+
}
45+
46+
public void setSales(int sales) {
47+
this.sales = sales;
48+
}
49+
50+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package com.baeldung.generics;
2+
3+
public interface Rankable {
4+
public int getRank();
5+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
package com.baeldung.generics;
2+
3+
import static org.junit.Assert.assertEquals;
4+
import static org.junit.Assert.assertNull;
5+
6+
import java.io.Serializable;
7+
import java.util.Optional;
8+
9+
import org.junit.Test;
10+
11+
public class GenericConstructorUnitTest {
12+
13+
@Test
14+
public void givenNonGenericConstructor_whenCreateNonGenericEntry_thenOK() {
15+
Entry entry = new Entry("sample", 1);
16+
17+
assertEquals("sample", entry.getData());
18+
assertEquals(1, entry.getRank());
19+
}
20+
21+
@Test
22+
public void givenGenericConstructor_whenCreateNonGenericEntry_thenOK() {
23+
Product product = new Product("milk", 2.5);
24+
product.setSales(30);
25+
Entry entry = new Entry(product);
26+
27+
assertEquals(product.toString(), entry.getData());
28+
assertEquals(30, entry.getRank());
29+
}
30+
31+
@Test
32+
public void givenNonGenericConstructor_whenCreateGenericEntry_thenOK() {
33+
GenericEntry<String> entry = new GenericEntry<String>(1);
34+
35+
assertNull(entry.getData());
36+
assertEquals(1, entry.getRank());
37+
}
38+
39+
@Test
40+
public void givenGenericConstructor_whenCreateGenericEntry_thenOK() {
41+
GenericEntry<String> entry = new GenericEntry<String>("sample", 1);
42+
43+
assertEquals("sample", entry.getData());
44+
assertEquals(1, entry.getRank());
45+
}
46+
47+
@Test
48+
public void givenGenericConstructorWithDifferentType_whenCreateGenericEntry_thenOK() {
49+
Product product = new Product("milk", 2.5);
50+
product.setSales(30);
51+
GenericEntry<Serializable> entry = new GenericEntry<Serializable>(product);
52+
53+
assertEquals(product, entry.getData());
54+
assertEquals(30, entry.getRank());
55+
}
56+
57+
@Test
58+
public void givenGenericConstructorWithWildCard_whenCreateGenericEntry_thenOK() {
59+
Product product = new Product("milk", 2.5);
60+
product.setSales(30);
61+
Optional<Product> optional = Optional.of(product);
62+
GenericEntry<Serializable> entry = new GenericEntry<Serializable>(optional);
63+
64+
assertEquals(product, entry.getData());
65+
assertEquals(30, entry.getRank());
66+
}
67+
68+
@Test
69+
public void givenGenericConstructor_whenCreateGenericEntryWithTwoTypes_thenOK() {
70+
MapEntry<String, Integer> entry = new MapEntry<String, Integer>("sample", 1);
71+
72+
assertEquals("sample", entry.getKey());
73+
assertEquals(1, entry.getValue()
74+
.intValue());
75+
}
76+
}

0 commit comments

Comments
 (0)