Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/211.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将字符串转换为类名,反之亦然_Java_Android - Fatal编程技术网

Java 如何将字符串转换为类名,反之亦然

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

我有许多活动(Main1,Main2…Mainn)是从一个超类管理的,所以我试图通过一个按钮(下一页)从Main I移动到Main I+1,为了不重复相同的代码,我尝试了n次将类名转换成整数以获得其编号(I),然后连接该编号(I+1)转换为字符串,然后将字符串转换为类类型,以便从按钮(下一页)调用它。下面是代码:我编辑了我的代码,这是一个工作完美的解决方案:

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它现在工作得很好,请参见我编辑的问题中的代码,非常感谢