Java 将向量转换为字符串?

Java 将向量转换为字符串?,java,vector,Java,Vector,当我将向量转换为字符串时,我遇到了一个问题 错误: Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: java.util.Vector cannot be cast to java.lang.String at Package_Sync.Package_sync.dataToDB(Package_sync.java:98) at Package_Sync.Package_sync.<in

当我将向量转换为字符串时,我遇到了一个问题

错误:

Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: java.util.Vector cannot be cast to java.lang.String
    at Package_Sync.Package_sync.dataToDB(Package_sync.java:98)
    at Package_Sync.Package_sync.<init>(Package_sync.java:29)
    at Package_Sync.Package_sync$3.run(Package_sync.java:319)
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:756)
    at java.awt.EventQueue.access$500(EventQueue.java:97)
    at java.awt.EventQueue$3.run(EventQueue.java:709)
    at java.awt.EventQueue$3.run(EventQueue.java:703)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:726)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
线程“AWT-EventQueue-0”java.lang.ClassCastException中的异常:无法将java.util.Vector转换为java.lang.String
在Package_Sync.Package_Sync.dataToDB(Package_Sync.java:98)
在Package_Sync.Package_Sync.(Package_Sync.java:29)
在Package_Sync.Package_Sync$3.run(Package_Sync.java:319)
在java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)中
位于java.awt.EventQueue.dispatchEventImpl(EventQueue.java:756)
在java.awt.EventQueue.access$500(EventQueue.java:97)
在java.awt.EventQueue$3.run(EventQueue.java:709)
在java.awt.EventQueue$3.run(EventQueue.java:703)
位于java.security.AccessController.doPrivileged(本机方法)
位于java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
位于java.awt.EventQueue.dispatchEvent(EventQueue.java:726)
位于java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
在java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)中
位于java.awt.EventDispatchThread.PumpeEventsforHierarchy(EventDispatchThread.java:105)
位于java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
位于java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
在java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
这是我的密码:

for(int i=0;i<vectron1.size();i++){

    Vector temp = new Vector();
    temp.add(vectron1.get(i));

    for(int j=0;j<temp.size();j++){

        String sql = "insert into t_pkg_details(pkgname,classname)   values(?,?)";
        ps = con.prepareStatement(sql);

        String name = (String) temp.get(0);
        String value = (String) temp.get(1);

        ps.setString(1,name);
        ps.setString(2,value);
        ps.execute();

        System.out.println("Extra class Inserted Successfully!");
    }
}

对于(int i=0;i问题可能是对象向量包含的不是
字符串的类型

用法:
注意:如果
temp.get
返回
null
,则可能引发
NullPointerException
。 它还可以抛出
ArrayIndexOutOfBoundsException
如果
Vector
的大小小于
2
,则必须相应地更改代码

String name = temp.get(0).toString(); 
String value =  temp.get(1).toString();
或者使用Hiru提到的代码(无
NullPointerException
,但出于上述原因,可以抛出
ArrayIndexOutOfBoundsException
):

更好的方法是使用泛型:

Vector<String> temp = new Vector<String>();
去做这个,

    String name = String.valueOf(temp.get(0));
    String value =  String.valueOf(temp.get(1));
Object.toString()的情况下,如果实例为null,则会抛出NullPointerException,因此,可以说,它不太安全。然而,使用String.valueOf()可能无法检查null

因为您可以通过在if-else中包装代码来处理ArrayIndexOutOfBoundsException

if (temp.size <= Your Max Index){
//your Code
}
else{
    throw new IndexOutOfBoundsException(outOfBoundsMsg(index));
}
if(温度大小
我认为,你不能这样做,你试图将字符串转换为Vector,这就是
java.lang.ClassCastException
的原因。下面是一个例子:

Vector vec1 = new Vector();
String str1 = vec1.toString();

现在在这个例子中,我将一个向量转换为字符串,因此它是一个有效的编译。

首先,什么是
vectron1
?这将有助于了解它是如何声明的。其次,当您只在
temp
中放入一个元素时,为什么要尝试从中取出两个元素?另外,如果可能,请不要使用
Vector
;最好指定您希望在Vector中的对象类型,即
Vector
。回答此问题的每个人都建议使用代码抛出
ArrayIndexOutOfBoundsException
。仍然不正确。如果
temp.get
返回,则不会抛出
ArrayIndexOutOfBoundsException
s null。问题是数组索引1超出了范围,如果出现这种情况,
temp.get
将不会返回null——它将抛出一个异常。@Hiru事实是,由于OP没有提供足够的信息,所以无法判断正确答案是什么。我怀疑他可能对列表的工作方式以及正确答案完全困惑swer(对于他想要完成的事情)可能与他的原始代码完全不同。
if (temp.size <= Your Max Index){
//your Code
}
else{
    throw new IndexOutOfBoundsException(outOfBoundsMsg(index));
}
 String name = (String) temp.get(0);
 String value = (String) temp.get(1);
Vector vec1 = new Vector();
String str1 = vec1.toString();