在很多时候我们需要将一个给了完整路径的类对象字符串转换成一个类的实例对象,就比如说有以下这样的一个字符串
String menAction= "gef.putin.step.ui.SystemMenuTest(xiajiaji)"在该类中需要有有一个字符串格式的参数,当然多个参数也可 以,我已经将多个参数的考虑进去,对改字符串进行解析就可以转换成类的实例对象了。以下是我做的一个小的Demo,如果能够帮助大家,我当然觉得很开心, 希望对大家有帮助。
import java.lang.reflect.Constructor;
public class Test {
public static void main(String [] args){
String menuAction = "gef.putin.step.ui.SystemMenuTest(xiajiaji)";
boolean endsWith = menuAction.endsWith(")");//判断是否带参数
SystemMenuTest action =null;
if(!endsWith) {
try{
action = (SystemMenuTest) Class.forName(menuAction).newInstance();
} catch(Exception ee) {
ee.printStackTrace();
}
} else {
String clazzName = menuAction.substring(0, menuAction.indexOf("("));
String parAllStr = menuAction.substring(menuAction.indexOf("(")+1, menuAction.indexOf(")"));//取参数名
boolean contains = parAllStr.contains(",");
String [] parStr = null;
if(contains) {
parStr = parAllStr.split(",");
} else {
parStr = new String[]{parAllStr};
}
try {
Class clazz = Class.forName(clazzName);
Class [] parClass = new Class[parStr.length];
for(int i =0;i<parStr.length;i++) {
parClass [i] = String.class;
}
Constructor con=clazz.getConstructor(parClass);
action = (SystemMenuTest) con.newInstance(parStr);
} catch(Exception exe) {
exe.printStackTrace();
}
}
action.show();
}
}
其中SystemMenuTest 代码如下:
public class SystemMenuTest{
private String name;
public SystemMenuTest(String name){
this.name = name;
}
public void show(){
System.out.println("要转换类中的参数是:"+name);
}
}
String menAction= "gef.putin.step.ui.SystemMenuTest(xiajiaji)"在该类中需要有有一个字符串格式的参数,当然多个参数也可 以,我已经将多个参数的考虑进去,对改字符串进行解析就可以转换成类的实例对象了。以下是我做的一个小的Demo,如果能够帮助大家,我当然觉得很开心, 希望对大家有帮助。
import java.lang.reflect.Constructor;
public class Test {
public static void main(String [] args){
String menuAction = "gef.putin.step.ui.SystemMenuTest(xiajiaji)";
boolean endsWith = menuAction.endsWith(")");//判断是否带参数
SystemMenuTest action =null;
if(!endsWith) {
try{
action = (SystemMenuTest) Class.forName(menuAction).newInstance();
} catch(Exception ee) {
ee.printStackTrace();
}
} else {
String clazzName = menuAction.substring(0, menuAction.indexOf("("));
String parAllStr = menuAction.substring(menuAction.indexOf("(")+1, menuAction.indexOf(")"));//取参数名
boolean contains = parAllStr.contains(",");
String [] parStr = null;
if(contains) {
parStr = parAllStr.split(",");
} else {
parStr = new String[]{parAllStr};
}
try {
Class clazz = Class.forName(clazzName);
Class [] parClass = new Class[parStr.length];
for(int i =0;i<parStr.length;i++) {
parClass [i] = String.class;
}
Constructor con=clazz.getConstructor(parClass);
action = (SystemMenuTest) con.newInstance(parStr);
} catch(Exception exe) {
exe.printStackTrace();
}
}
action.show();
}
}
其中SystemMenuTest 代码如下:
public class SystemMenuTest{
private String name;
public SystemMenuTest(String name){
this.name = name;
}
public void show(){
System.out.println("要转换类中的参数是:"+name);
}
}