We are about to switch to a new forum software. Until then we have removed the registration on this forum.
I try to create new class from a class name but I fail. My first state it's find a good class, I manage this part but after I find no possibility to instantiate from the class name. I need to do that because all my methods is used everywhere in my code and I need to find information from those in a single place. I hope my purpose is clear...
When I pass the name find with method Field
by method forName()
the console return Unhandled exception type ClassNotFoundException
import java.util.Iterator;
import java.lang.reflect.*;
Target class_a = new Target() ;
Target class_b = new Target() ;
Truc class_c = new Truc() ;
void setup() {
class_a.is(true);
class_b.is(false);
Field [] f = this.getClass().getDeclaredFields();
println("field num:",f.length);
for(int i = 0 ; i < f.length ; i++) {
if(f[i].getType().getName().contains("Target")) {
println("BRAVO it's a good classes");
println("class:",f[i].getClass());
println("name:",f[i].getName());
// I imagine pass the name here to instantiate the class but that's don't work
//Class<?> class_type = Class.forName(f[i].getName());
Class<?> class_type = Class.forName("class_a");
//Class<?> class_type = Class.forName(f[i].getClass());
Target t = (Target) class_type.newInstance();
// here I try to call method of the selected class
println(t.get_is());
}
}
}
class Target{
boolean is;
Target() {}
void is(boolean is) {
this.is = is;
}
boolean get_is() {
return is;
}
}
class Truc{
Truc() {}
}
Answers
Please note that there’s a new forum
Better post there
again a new forum :) Ok I post on it. Thx
;-)
Reflection operations demand a
try/catch () {}
block in order to handle some possible ReflectiveOperationException: #-oThx @GoToLoop I improve my code, but I cannot use the
Field.getName()
to point on the declared Classes created before. I find to information to do that.Whaouuu, very intresting way. I try tomorrow to use the
Field.getName()
to pass at methodreadBoolFromField(in, "is")
so I must transform String to Object ?I think continued on the new forum
here: https://discourse.processing.org/t/how-to-instantiate-class-from-with-class-forname/957/2