Java 如何将字符串转换为类名,反之亦然
我有许多活动(Main1,Main2…Mainn)是从一个超类管理的,所以我试图通过一个按钮(下一页)从Main I移动到Main I+1,为了不重复相同的代码,我尝试了n次将类名转换成整数以获得其编号(I),然后连接该编号(I+1)转换为字符串,然后将字符串转换为类类型,以便从按钮(下一页)调用它。下面是代码:我编辑了我的代码,这是一个工作完美的解决方案:Java 如何将字符串转换为类名,反之亦然,java,android,Java,Android,我有许多活动(Main1,Main2…Mainn)是从一个超类管理的,所以我试图通过一个按钮(下一页)从Main I移动到Main I+1,为了不重复相同的代码,我尝试了n次将类名转换成整数以获得其编号(I),然后连接该编号(I+1)转换为字符串,然后将字符串转换为类类型,以便从按钮(下一页)调用它。下面是代码:我编辑了我的代码,这是一个工作完美的解决方案: str = getClass().getName();// this code line converts the class name
str = getClass().getName();// this code line converts the class name to string
int num = Integer.parseInt(str.substring(str.indexOf("_") + 1)); //this extracts integer from string
str1 = "com.example.Test.Main_" + (num + 1);//this is a pure concatenation
str2 = "com.example.Test.Main_" + (num - 1);//this is a pure concatenation
try {
nextClass = Class.forName(str1);// this how to convert string to a class name
i10.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(getApplicationContext(), nextClass);
startActivity(i);
str = nextClass.getName();
overridePendingTransition(R.anim.pushin, R.anim.pushout);
}
});
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
查阅文档:字符串中的字符必须全部为十进制数字。如果要获取当前类名,应使用以下命令:
String str = getClass().getName();
现在str是Main1,Main2。所以您无法解析它,因为它不是字符串。您可以使用以下格式重命名类:Main_1、Main_2、。。。并更改您的代码:
int num = Integer.parseInt(str.substring(str.indexOf("_") + 1));
str1="Main_"+(num+1);
Class nextClass=Class.forName("com.example.Test."+ str1);
试试这个代码。应该有用
String str = getClass().toString();
Integer num = Integer.parseInt(str.replaceAll("\\D+",""));
str1="Main"+ String.valueOf(num+1);
Class<?> nextClass;
try {
nextClass = Class.forName("com.example.Test" + str );
i10.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(getApplicationContext(), nextClass);
startActivity(i);
overridePendingTransition(R.anim.pushin, R.anim.pushout);
}
});
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
String str=getClass().toString();
整数num=Integer.parseInt(str.replaceAll(“\\D+”,”);
str1=“Main”+String.valueOf(num+1);
类别nextClass;
试一试{
nextClass=Class.forName(“com.example.Test”+str);
i10.setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图v){
意图i=新意图(getApplicationContext(),nextClass);
星触觉(i);
覆盖转换(R.anim.pushin,R.anim.pushout);
}
});
}catch(classnotfounde异常){
e、 printStackTrace();
}
您遇到了什么异常?我遇到了一个错误:此行有多个标记-类是原始类型。对泛型类型类的引用应参数化-字符串无法解析为变量我收到此错误消息:此行有多个标记-未处理的异常类型ClassNotFoundException-类是原始类型。泛型类型类的引用应该参数化。我已经编辑了我的答案。我忘了在Main后面加“u”。如果你有Main_1,Main_2。。。在com.example.Test中,在“必须工作”中。谢谢你,伙计,我用完美的代码编辑了我的问题,看起来不错,但别忘了控制你的num。如果num当前为0,num-1将指向Main\u1。最后一项活动需要进行类似的检查。最后,如果有用,请将此标记为答案。Thanksi收到此消息错误:此行有多个标记-未处理的异常类型ClassNotFoundException-类是原始类型。泛型类型类的引用应该参数化现在检查答案。。我已经编辑过了。我假设你的类名是TestMain1
TestMain2
。包名是com.example.Test,类是MAin1,main2。。。错误主要出现在这个代码行类nextClass=Class.forName(“com.example”+str1)@安德洛德夫啊。。。遗漏了一个“.”there dude..更改行nextClass=Class.forName(“com.example.Test.”+str)
Now will workMAN它现在工作得很好,请参见我编辑的问题中的代码,非常感谢