상세 컨텐츠

본문 제목

Generics - Bounded Type Parameters In Classes And Methods

Java

by techbard 2016. 7. 10. 10:06

본문

반응형



# Animal.java


public class Animal implements Comparable<Animal> {


    private String name;


    public Animal() {

    }


    public Animal(String name) {

this.name = name;

    }


    public String getName() {

return name;

    }


    @Override

    public String toString() {

return String.format("%s\n", this.name);

    }


    @Override

    public boolean equals(Object obj) {

if (obj == null) {

   return false;

}


if (!(obj instanceof Animal)) {

   return false;

}


return (this.getName().equals(((Animal) obj).getName()));

    }


    @Override

    public int compareTo(Animal o) {

if (o == null)

   return 1;


// Strings are comparable.

int cmpValue = this.getName().compareTo(o.getName());


if (cmpValue < 0)

   return 1;

if (cmpValue > 0)

   return -1;


return 0;

    }

}



# BestDataContainer.java


import java.util.NoSuchElementException;


public class BestDataContainer<T extends Comparable<? super T>> {


    private Object[] data;

    public int countItems;


    public BestDataContainer() {

this(10);

    }


    public BestDataContainer(int capacity) {

data = new Object[capacity];

countItems = 0;

    }


    public int size() {

return countItems;

    }


    public boolean add(T item) {

if (item == null) {

   return false;

}


if (countItems == data.length) {

   return false;

}


int itemIndex = findItem(item);

if (itemIndex > 0) {

   return false;

}


data[countItems++] = item;

return true;

    }


    public boolean remove(int index) {

validateIndex(index);

int i = index;

int j = i + 1;


while (j < countItems) {

   data[j - 1] = data[j];

   j++;

}

countItems--;

return true;

    }


    public boolean remove(T item) {

if (item == null) {

   return false;


}


int index = findItem(item);

if (index < 0) {

   return false;

}


return remove(index);

    }


    public int findItem(T item) {

for (int i = 0; i < countItems; i++) {

   if (data[i].equals(item)) {

return i;

   }

}


return -1;

    }


    public T get(int index) {

validateIndex(index);

return (T) data[index];

    }


    private void validateIndex(int index) {

if (index < 0 || index >= countItems) {

   throw new NoSuchElementException("Invalid Index");

}

    }


    @Override

    public String toString() {

StringBuilder sb = new StringBuilder();


for (int i = 0; i < countItems; i++) {

   sb.append("Next Item: " + data[i] + "\n");

}


return sb.toString();

    }


    public T getMax() {

if (countItems > 0) {

   T max = (T) data[0];

   for (int i = 1; i < countItems; i++) {

max = BestDataContainer.getMax(max, (T) data[i]);

   }


   return max;

} else if (countItems == 0) {

   return (T) data[0];

}


return null;

    }

    

    public T getMin() {

if (countItems > 0) {

   T min = (T) data[0];

   for (int i = 1; i < countItems; i++) {

min = BestDataContainer.getMin(min, (T) data[i]);

   }


   return min;

} else if (countItems == 0) {

   return (T) data[0];

}


return null;

    }


    public static <T extends Comparable<? super T>> T getMax(T o1, T o2) {

return (o1.compareTo(o2)) == 1 ? o1 : o2;

    }


    public static <T extends Comparable<? super T>> T getMin(T o1, T o2) {

return (o1.compareTo(o2)) == 1 ? o2 : o1;

    }

}



# Zoo.java


public class Zoo {


    public static void main(String[] args) {

BestDataContainer<Animal> bdc = new BestDataContainer<>();


bdc.add(new Animal("Chipmunk"));

bdc.add(new Animal("Hedgehog"));

bdc.add(new Animal("Dog"));

bdc.add(new Animal("Frog"));

bdc.add(new Animal("Eagele"));


System.out.println(bdc);

System.out.println("====================");


System.out.println("Max: " + bdc.getMax());

System.out.println("Min: " + bdc.getMin());

    }

}




# 결과


Next: Item: Chipmunk


Next: Item: Hedgehog


Next: Item: Dog


Next: Item: Frog


Next: Item: Eagele



====================

Max: Chipmunk


Min: Hedgehog



반응형

관련글 더보기

댓글 영역