简体   繁体   English

如何解决此错误java.lang.Object []无法转换为java.lang.String []?

[英]How would i fix this Error java.lang.Object[] cannot be cast to java.lang.String[]?

Im not to sure how to fix this since my code is String[] and not Object[] How would i go about fixing this error? 林不知道如何解决此问题,因为我的代码是String []而不是Object []我将如何解决此错误?

Here is s the full logcat: 这是完整的日志:

06-14 00:25:40.356: W/dalvikvm(13023): threadid=1: thread exiting with uncaught exception (group=0x40aa41f8)
06-14 00:25:40.356: E/AndroidRuntime(13023): FATAL EXCEPTION: main
06-14 00:25:40.356: E/AndroidRuntime(13023): java.lang.ClassCastException: java.lang.Object[] cannot be cast to java.lang.String[]
06-14 00:25:40.356: E/AndroidRuntime(13023):    at com.example.drawingarrays.OutPutConversion.Out(OutPutConversion.java:7)
06-14 00:25:40.356: E/AndroidRuntime(13023):    at com.example.drawingarrays.MainActivity.onClick(MainActivity.java:64)
06-14 00:25:40.356: E/AndroidRuntime(13023):    at android.view.View.performClick(View.java:3540)
06-14 00:25:40.356: E/AndroidRuntime(13023):    at android.view.View$PerformClick.run(View.java:14167)
06-14 00:25:40.356: E/AndroidRuntime(13023):    at android.os.Handler.handleCallback(Handler.java:605)
06-14 00:25:40.356: E/AndroidRuntime(13023):    at android.os.Handler.dispatchMessage(Handler.java:92)
06-14 00:25:40.356: E/AndroidRuntime(13023):    at android.os.Looper.loop(Looper.java:137)
06-14 00:25:40.356: E/AndroidRuntime(13023):    at android.app.ActivityThread.main(ActivityThread.java:4586)
06-14 00:25:40.356: E/AndroidRuntime(13023):    at java.lang.reflect.Method.invokeNative(Native Method)
06-14 00:25:40.356: E/AndroidRuntime(13023):    at java.lang.reflect.Method.invoke(Method.java:511)
06-14 00:25:40.356: E/AndroidRuntime(13023):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
06-14 00:25:40.356: E/AndroidRuntime(13023):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
06-14 00:25:40.356: E/AndroidRuntime(13023):    at dalvik.system.NativeStart.main(Native Method)

Here is my code: 这是我的代码:

public class OutPutConversion {
DrawingTools GAL = new DrawingTools();

public void Out() {
    String[] Result = (String[]) GAL.getAL().toArray();
    float[] vertices = new float[Result.length];
    for (int i = 0; i < vertices.length; i++) {
        vertices[i] = Float.valueOf(Result[i]);

    }
  }
}

Here is the DrawingTools Class: 这是DrawingTools类:

public class DrawingTools {
ArrayList<String> AL = new ArrayList<String>();

public ArrayList<String> getAL() {
    return AL;
}

public void AddLine(String Input1) {
    String[] pStrings = Input1.split(",");
    for (int i = 0; i < pStrings.length; i++) {
        AL.add(pStrings[i]);
    }

}

GAL.getAL()返回ArrayList<String> ,但是ArrayList.toArray()返回Object []的通用类型是什么(请参阅API),并且您不能将其GAL.getAL().toArray(new String[0])为String [],请尝试GAL.getAL().toArray(new String[0])改为使用GAL.getAL().toArray(new String[0])

You can not cast an entire array, so you have to convert it, or cast it inside the loop appropriately. 您不能转换整个数组,因此必须对其进行转换,或将其适当地转换到循环内。 Or in this case no cast at all. 或在这种情况下完全不进行任何转换。

public void Out() {
    Object[] Result = GAL.getAL().toArray();
    float[] vertices = new float[Result.length];
    for (int i = 0; i < vertices.length; i++) {
        vertices[i] = Float.valueOf(Result[i].toString());

    }
}

Arrays do not follow inheritance rules of their elements. 数组不遵循其元素的继承规则。 The fact that String extends Object does not mean that String[] extends Object[] . String扩展Object事实并不意味着String[]扩展Object[]

To "cast" from Object[] to String[] you have to create new string array, iterate over elements of object array and copy element-by element with casting exactly as you do this for float. 要将“ Object[] ”“投射”到String[]您必须创建新的字符串数组,遍历对象数组的元素,并完全按照对float的方式进行铸造,逐个复制元素。

so, the simplest fix to your code is just do the following: 因此,对代码的最简单修复就是执行以下操作:

Object[] Result = GAL.getAL().toArray();
float[] vertices = new float[Result.length];
for (int i = 0; i < vertices.length; i++) {
    vertices[i] = Float.valueOf(String.valuOf(Result[i]));
}

However as far as I understand getAL() method returns Collection<String> . 但是据我了解, getAL()方法返回Collection<String> So, you can: 所以你可以:

 String[] Result = GAL.getAL().toArray(new String[0]);
    float[] vertices = new float[Result.length];
    for (int i = 0; i < vertices.length; i++) {
        vertices[i] = Float.valueOf(Result[i]);
    }

or even just directly iterate the collection: 甚至直接迭代集合:

Collection<String> Result = GAL.getAL();
float[] vertices = new float[Result.size()];
for (int i = 0; i < vertices.length; i++) {
    vertices[i] = Float.valueOf(Result[i]);
}

And the last tip. 还有最后一个提示。 There is naming convention in java. Java中有命名约定。 All variables and methods names start with small letter. 所有变量和方法名称均以小写字母开头。 All classes names start with capital letter. 所有类的名称均以大写字母开头。 Start follow this convention now. 立即开始遵循此约定。 Otherwise your code will be unreadable. 否则,您的代码将无法读取。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 为什么我只能在 Android 4 中得到 java.lang.Object[] cannot be cast to java.lang.String[][] 错误? - Why do I get a java.lang.Object[] cannot be cast to java.lang.String[][] error only in Android 4? (java.lang.String)不能应用于(java.lang.Object) - (java.lang.String) cannot be applied to (java.lang.Object) java.lang.Object []无法转换为java.lang.String [] - java.lang.Object[] cannot be converted to java.lang.String[] ClassCastException:java.lang.Object []无法强制转换为java.lang.String [] android - ClassCastException: java.lang.Object[] cannot be cast to java.lang.String[] android ClassCastException:java.lang.Object []无法转换为java.lang.String [] [] - ClassCastException: java.lang.Object[] cannot be cast to java.lang.String[][] AsyncTask:ClassCastException:java.lang.Object []无法强制转换为java.lang.String [] - AsyncTask: ClassCastException: java.lang.Object[] cannot be cast to java.lang.String[] android ArrayMap引发java.lang.ClassCastException:无法将java.lang.String强制转换为java.lang.Object [] - android ArrayMap throws java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Object[] 如何解决无法在RN中强制转换为java.lang.String的问题? - How to fix `cannot be cast to java.lang.String` in RN? 获取错误 java.lang.ClassCastException: java.lang.String 无法转换为 [Ljava.lang.Object; - getting error java.lang.ClassCastException: java.lang.String cannot be cast to [Ljava.lang.Object; 如何修复 class java.util.LinkedHashMap 无法转换为 class Z93F725A07428BString.3321C886F46D4 错误。 - how to fix class java.util.LinkedHashMap cannot be cast to class java.lang.String error
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM