├── .gitignore ├── .idea ├── .gitignore ├── misc.xml └── modules.xml ├── belajar-java-generic.iml └── src └── programmer └── zaman └── now └── generic ├── MyData.java ├── Pair.java ├── Person.java ├── application ├── ArrayHelperApp.java ├── ComparableApp.java ├── ComparatorApp.java ├── ConstraintApp.java ├── ContravariantApp.java ├── CovariantApp.java ├── GenericClassApp.java ├── InvariantApp.java ├── MultipleConstraintApp.java ├── PairApp.java ├── TypeErasureApp.java └── WildcardApp.java └── util └── ArrayHelper.java /.gitignore: -------------------------------------------------------------------------------- 1 | out -------------------------------------------------------------------------------- /.idea/.gitignore: -------------------------------------------------------------------------------- 1 | # Default ignored files 2 | /shelf/ 3 | /workspace.xml 4 | # Datasource local storage ignored files 5 | /dataSources/ 6 | /dataSources.local.xml 7 | # Editor-based HTTP Client requests 8 | /httpRequests/ 9 | -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /belajar-java-generic.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /src/programmer/zaman/now/generic/MyData.java: -------------------------------------------------------------------------------- 1 | package programmer.zaman.now.generic; 2 | 3 | public class MyData { 4 | 5 | private T data; 6 | 7 | public MyData(T data) { 8 | this.data = data; 9 | } 10 | 11 | public T getData() { 12 | return data; 13 | } 14 | 15 | public void setData(T data) { 16 | this.data = data; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/programmer/zaman/now/generic/Pair.java: -------------------------------------------------------------------------------- 1 | package programmer.zaman.now.generic; 2 | 3 | public class Pair { 4 | 5 | private T first; 6 | 7 | private U second; 8 | 9 | public Pair(T first, U second) { 10 | this.first = first; 11 | this.second = second; 12 | } 13 | 14 | public T getFirst() { 15 | return first; 16 | } 17 | 18 | public void setFirst(T first) { 19 | this.first = first; 20 | } 21 | 22 | public U getSecond() { 23 | return second; 24 | } 25 | 26 | public void setSecond(U second) { 27 | this.second = second; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/programmer/zaman/now/generic/Person.java: -------------------------------------------------------------------------------- 1 | package programmer.zaman.now.generic; 2 | 3 | public class Person implements Comparable { 4 | 5 | private String name; 6 | private String address; 7 | 8 | public Person(String name, String address) { 9 | this.name = name; 10 | this.address = address; 11 | } 12 | 13 | public String getName() { 14 | return name; 15 | } 16 | 17 | public void setName(String name) { 18 | this.name = name; 19 | } 20 | 21 | public String getAddress() { 22 | return address; 23 | } 24 | 25 | public void setAddress(String address) { 26 | this.address = address; 27 | } 28 | 29 | @Override 30 | public int compareTo(Person o) { 31 | return this.name.compareTo(o.name); 32 | } 33 | 34 | @Override 35 | public String toString() { 36 | return "Person{" + 37 | "name='" + name + '\'' + 38 | ", address='" + address + '\'' + 39 | '}'; 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /src/programmer/zaman/now/generic/application/ArrayHelperApp.java: -------------------------------------------------------------------------------- 1 | package programmer.zaman.now.generic.application; 2 | 3 | import programmer.zaman.now.generic.util.ArrayHelper; 4 | 5 | public class ArrayHelperApp { 6 | public static void main(String[] args) { 7 | 8 | String[] names = {"Eko", "Kurniawan", "Khannedy"}; 9 | Integer[] numbers = {1, 2, 3, 4, 5}; 10 | 11 | System.out.println( 12 | ArrayHelper.count(names) 13 | ); 14 | 15 | System.out.println( 16 | ArrayHelper.count(numbers) 17 | ); 18 | 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/programmer/zaman/now/generic/application/ComparableApp.java: -------------------------------------------------------------------------------- 1 | package programmer.zaman.now.generic.application; 2 | 3 | import programmer.zaman.now.generic.Person; 4 | 5 | import java.util.Arrays; 6 | 7 | public class ComparableApp { 8 | public static void main(String[] args) { 9 | 10 | Person[] people = { 11 | new Person("Eko", "Indonesia"), 12 | new Person("Budi", "Indonesia"), 13 | new Person("Joko", "Indonesia") 14 | }; 15 | 16 | Arrays.sort(people); 17 | 18 | System.out.println(Arrays.toString(people)); 19 | 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/programmer/zaman/now/generic/application/ComparatorApp.java: -------------------------------------------------------------------------------- 1 | package programmer.zaman.now.generic.application; 2 | 3 | import programmer.zaman.now.generic.Person; 4 | 5 | import java.util.Arrays; 6 | import java.util.Comparator; 7 | 8 | public class ComparatorApp { 9 | public static void main(String[] args) { 10 | 11 | Person[] people = { 12 | new Person("Eko", "Indonesia"), 13 | new Person("Budi", "Indonesia"), 14 | new Person("Joko", "Indonesia") 15 | }; 16 | 17 | Comparator comparator = new Comparator() { 18 | @Override 19 | public int compare(Person o1, Person o2) { 20 | return o1.getName().compareTo(o2.getName()); 21 | } 22 | }; 23 | 24 | Arrays.sort(people, comparator); 25 | 26 | System.out.println(Arrays.toString(people)); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/programmer/zaman/now/generic/application/ConstraintApp.java: -------------------------------------------------------------------------------- 1 | package programmer.zaman.now.generic.application; 2 | 3 | public class ConstraintApp { 4 | public static void main(String[] args) { 5 | 6 | NumberData integerNumberData = new NumberData<>(1); 7 | NumberData longNumberData = new NumberData<>(1L); 8 | 9 | // NumberData stringNumberData = new NumberData("Eko"); // ERROR 10 | 11 | } 12 | 13 | 14 | public static class NumberData{ 15 | 16 | private T data; 17 | 18 | public NumberData(T data) { 19 | this.data = data; 20 | } 21 | 22 | public T getData() { 23 | return data; 24 | } 25 | 26 | public void setData(T data) { 27 | this.data = data; 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/programmer/zaman/now/generic/application/ContravariantApp.java: -------------------------------------------------------------------------------- 1 | package programmer.zaman.now.generic.application; 2 | 3 | import programmer.zaman.now.generic.MyData; 4 | 5 | public class ContravariantApp { 6 | public static void main(String[] args) { 7 | 8 | MyData objectMyData = new MyData<>("Eko"); 9 | objectMyData.setData(1000); 10 | 11 | MyData myData = objectMyData; 12 | 13 | process(objectMyData); 14 | 15 | System.out.println(objectMyData.getData()); 16 | } 17 | 18 | public static void process(MyData myData){ 19 | Object value = myData.getData(); 20 | System.out.println("Process parameter " + value); 21 | 22 | myData.setData("Eko Kurniawan"); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/programmer/zaman/now/generic/application/CovariantApp.java: -------------------------------------------------------------------------------- 1 | package programmer.zaman.now.generic.application; 2 | 3 | import programmer.zaman.now.generic.MyData; 4 | 5 | public class CovariantApp { 6 | public static void main(String[] args) { 7 | 8 | MyData stringMyData = new MyData<>("Eko"); 9 | process(stringMyData); 10 | 11 | MyData myData = stringMyData; 12 | } 13 | 14 | public static void process(MyData myData){ 15 | System.out.println(myData.getData()); 16 | 17 | // myData.setData(1); tidak boleh, karena berbahaya 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/programmer/zaman/now/generic/application/GenericClassApp.java: -------------------------------------------------------------------------------- 1 | package programmer.zaman.now.generic.application; 2 | 3 | import programmer.zaman.now.generic.MyData; 4 | 5 | public class GenericClassApp { 6 | public static void main(String[] args) { 7 | 8 | MyData stringMyData = new MyData("Eko"); 9 | MyData integerMyData = new MyData(10); 10 | 11 | String stringValue = stringMyData.getData(); 12 | Integer integerValue = integerMyData.getData(); 13 | 14 | System.out.println(stringValue); 15 | System.out.println(integerValue); 16 | 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/programmer/zaman/now/generic/application/InvariantApp.java: -------------------------------------------------------------------------------- 1 | package programmer.zaman.now.generic.application; 2 | 3 | import programmer.zaman.now.generic.MyData; 4 | 5 | import javax.swing.*; 6 | 7 | public class InvariantApp { 8 | public static void main(String[] args) { 9 | 10 | MyData stringMyData = new MyData<>("Eko"); 11 | // doIt(stringMyData); // ERROR 12 | // MyData objectMyData = stringMyData; // ERROR 13 | 14 | MyData objectMyData = new MyData<>(1000); 15 | // MyData integerMyData = objectMyData; // ERROR 16 | // doItInteger(objectMyData); 17 | } 18 | 19 | public static void doIt(MyData objectMyData){ 20 | // do nothing 21 | } 22 | 23 | public static void doItInteger(MyData integerMyData){ 24 | // do nothing 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/programmer/zaman/now/generic/application/MultipleConstraintApp.java: -------------------------------------------------------------------------------- 1 | package programmer.zaman.now.generic.application; 2 | 3 | public class MultipleConstraintApp { 4 | public static void main(String[] args) { 5 | // Data managerData = new Data<>(new Manager()); // ERROR Manager tidak implement CanSayHello 6 | Data vicePresidentData = new Data<>(new VicePresident()); 7 | } 8 | 9 | public static interface CanSayHello { 10 | void sayHello(String name); 11 | } 12 | 13 | public static abstract class Employee { 14 | 15 | } 16 | 17 | public static class Manager extends Employee { 18 | 19 | } 20 | 21 | public static class VicePresident extends Employee implements CanSayHello { 22 | 23 | @Override 24 | public void sayHello(String name) { 25 | System.out.println("Hello " + name); 26 | } 27 | } 28 | 29 | public static class Data{ 30 | 31 | private T data; 32 | 33 | public Data(T data) { 34 | this.data = data; 35 | } 36 | 37 | public T getData() { 38 | return data; 39 | } 40 | 41 | public void setData(T data) { 42 | this.data = data; 43 | } 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /src/programmer/zaman/now/generic/application/PairApp.java: -------------------------------------------------------------------------------- 1 | package programmer.zaman.now.generic.application; 2 | 3 | import programmer.zaman.now.generic.Pair; 4 | 5 | public class PairApp { 6 | public static void main(String[] args) { 7 | 8 | Pair pair = new Pair("eko", 100); 9 | System.out.println(pair.getFirst()); 10 | System.out.println(pair.getSecond()); 11 | 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/programmer/zaman/now/generic/application/TypeErasureApp.java: -------------------------------------------------------------------------------- 1 | package programmer.zaman.now.generic.application; 2 | 3 | import programmer.zaman.now.generic.MyData; 4 | 5 | public class TypeErasureApp { 6 | public static void main(String[] args) { 7 | 8 | MyData myData = new MyData("Eko"); 9 | 10 | MyData integerMyData = (MyData) myData; 11 | Integer integer = integerMyData.getData(); 12 | 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/programmer/zaman/now/generic/application/WildcardApp.java: -------------------------------------------------------------------------------- 1 | package programmer.zaman.now.generic.application; 2 | 3 | import programmer.zaman.now.generic.MyData; 4 | 5 | public class WildcardApp { 6 | public static void main(String[] args) { 7 | 8 | print(new MyData(100)); 9 | print(new MyData("Eko")); 10 | print(new MyData(new MultipleConstraintApp.Manager())); 11 | 12 | } 13 | 14 | public static void print(MyData myData){ 15 | System.out.println(myData.getData()); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/programmer/zaman/now/generic/util/ArrayHelper.java: -------------------------------------------------------------------------------- 1 | package programmer.zaman.now.generic.util; 2 | 3 | public class ArrayHelper { 4 | 5 | public static int count(T[] array) { 6 | return array.length; 7 | } 8 | 9 | } 10 | --------------------------------------------------------------------------------