I'm trying to solve a problem where I have to create a class that takes an object or list of objects as generic type. I don't want to create multiple classes because I have all other fields commons.
Here is what I did but I'm not sure if it is safe in long run.
Main class.
public class TestGeneric{
public static void main(String[] args) {
List<Cat> cats = new ArrayList<>();
cats.add(new Cat("Tom"));
cats.add(new Cat("Jerry"));
cats.add(new Cat("Billi"));
Dog dog = new Dog("Bow");
new Rat<>(cats).instOf();
System.out.println();
new Rat<>(dog).instOf();
}
}
Generic class in which I want to pass a list or single object in generic object.
class Rat<T> {
private T obj ;
public Rat(T t) {
this.obj = t;
}
public void instOf() {
if(obj instanceof Dog) {
System.out.println((obj.getClass()).getName());
}
if(obj instanceof Cat) {
System.out.println("Instance of Cat");
}
if(obj instanceof List) {
for(Object object : ((List) obj).toArray()) {
System.out.println(((Cat)object).getName());
}
}
}
}
class to be passed as single object or list.
class Dog {
private String name;
public Dog() {}
public Dog(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Dog [name=" + name + "]";
}
}
another class to be passed as single object or list.
class Cat {
private String name;
public Cat() {}
public Cat(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Dog [name=" + name + "]";
}
}
Please suggest if this is the right way to do this OR is there other better approach to do this?