[英]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.