Can I use enums in Java to define what class to call/use? If so, how? -
is possible use enums in java define class need call @ runtime?
for example, if have 3 enums , 3 classes, using same interface/common method names, can evaluate string, see if valid enum, , then, @ runtime, define class use make method call? possible?
for example, thinking this:
private enum animal { duck, dog, cat; } public isvalid(string animal) { for(animal : animal.values()) { if(a.name().equalsignorecase(animal)) return true; } return false; } public feedanimal(string animal) { if(isvalid(animal) { //get class use // call class.feed(); //maybe more stuff } } but i'm unsure how really.
yes possible , btw. refactor code bit , use oo concepts here. take below.
the enum:
public enum validanimals { duck(duck.class), dog(dog.class); private validanimals(class animal){ this.animal=animal; } private class animal; public class getanimalclass(){ return animal; } public static boolean isvalid(animal otheranimal) { (validanimals animal : validanimals.values()) { if (animal.getanimalclass() == otheranimal.getclass()) { return true; } } return false; } } the animal class, used specific animal types:
public abstract class animal { public abstract void feedanimal(); } specific animals examples:
public class dog extends animal { public void feedanimal(){ system.out.println("feeding dog"); } } public class duck extends animal{ public void feedanimal(){ system.out.println("feeding duck"); } } public class cat extends animal{ public void feedanimal(){ system.out.println("feeding cat"); } } and main class uses written above:
public class main { public static void main(string[] args) { dog dog = new dog(); duck duck = new duck(); cat cat = new cat(); collection<animal> hungryanimals = new arraylist<animal>(); hungryanimals.add(dog); hungryanimals.add(duck); hungryanimals.add(cat); (animal a: hungryanimals){ if (validanimals.isvalid(a)){ a.feedanimal(); } } } } and expected output:
feeding dog feeding duck
the cat not on list , stays hungry
Comments
Post a Comment