Tag: 铸造

ClassCastException:ArrayList不能转换为String

我收到此错误: java.lang.ClassCastException:java.util.ArrayList无法强制转换为java.lang.String 这是代码: public static Listproduit_cart(ArrayList l) { Listre=new ArrayList(); Listl4=new ArrayList(); re=(List) l.get(0); for(int i=1;i<l.size();i++) { l4=new ArrayList(); for(int j=0;j<re.size();j++) { for(int k=0;k<((ArrayList)l.get(i)).size();k++) { l4.add(re.get(j) + " " + (String)((ArrayList)l.get(i)).get(k)); } } re=new ArrayList(); for(int m=0;m<l4.size();m++) { re.add(l4.get(m)); } } return re; } 问题出在这一行: l4.add(re.get(j)+” “+(String)((ArrayList)l.get(i)).get(k)); 我试着把它重写为: l4.add(re.get(j)+” “+((ArrayList)l.get(i)).get(k)); 但它不起作用。 我该怎么办 ?

转换为在运行时确定的类

我有一个方法fetchObjects(String) ,期望返回一个Contract业务对象数组。 className参数告诉我应该返回什么样的业务对象(当然这在这个解释的情况下没有意义,因为我已经说过我将返回Contract s,但它基本上是我在实际场景中的情况)。 所以我从某处获取了一组条目并加载了集合条目的类(其类型由className指定)。 现在我需要构造要返回的数组,所以我使用Set的toArray(T[])方法。 使用reflection,我构建了一个空的Contracts数组。 但是,这给了我静态类型Object的值! 接下来我需要将它转换为适当的类型,在本例中是Contract[] (参见下面列表中的“带星号 – 下划线”部分)。 我的问题是:有没有办法,如何,如同在列表中那样转换为Contract[] , 但只通过className (或entriesType ) 确定数组元素的类型( Contract )? 换句话说,我想做的基本上是这样的: (entriesType[]) valueWithStaticTypeObject ,其中entriesType被classname参数指定的classname替换,即Contract 。 这在某种程度上是不可能的,还是可以以某种方式完成? 也许使用generics? package xx.testcode; import java.util.HashSet; import java.util.Set; class TypedArrayReflection { public static void main(String[] args) { try { Contract[] contracts = fetchObjects(“Contract”); System.out.println(contracts.length); } catch (ClassNotFoundException e) {} } […]

如何在Java中将Vector 转换为Vector ?

我正在使用带有自定义类对象的JComboBox,并且equals方法被覆盖,并且非常深入地集成到代码中。 问题是如果两个对象在JComboBox下拉列表中相等,那么如果选择了一个,则选择all,并且get selected index返回-1。 有没有办法将Vector转换为Vector ? 我试过了 Vector v_temp=(ca.courses.get(i).classes); 和 Vector v_temp=(ca.courses.get(i).classes); 其中Clas_2是Clas_2的父Clas_1 , Clas_3是Clas_3的扩展,但它们都没有编译。 我只需要JComboBox不要使用over-ridden equals方法。 *注意我知道我可以将每个单独的元素转换为一个新的数组,但宁愿拥有更高效的内存解决方案。

通过JNI传递C和Java之间的指针

我一直在通过JNI在Java中存储c指针,遵循@tulskiy的建议在这篇文章中通过JNI传递C和Java之间的指针 诀窍是将指针转换为jlong​​。 所以从c我有return (jlong) ptr; 我正在返回一个jlong​​(总是64位),因为我希望我的代码可以在64位和32位系统上运行。 64位计算机上64位指针的内存大小为64,因此在32位计算机上,内存中指针的大小为32位。 问题是在32位机器上我得到一个编译器警告说“从不同大小的指针转换为整数”。 如果我有return (jlong) (int32_t) ptr;警告就会消失return (jlong) (int32_t) ptr; 但是这个代码不适合64位机器。 我希望我的代码编译时没有警告,这样如果有合法的警告,我会看到它。 有人有主意吗? 谢谢,本

如何从唯一的字符串生成唯一的int?

我有一个带有String的对象,该String包含唯一的id。 (例如“ocx7gf”或“67hfs8”)我需要为它提供一个int hascode()的实现,这显然是唯一的。 如何以最简单/最快的方式将字符串转换为唯一的int? 10X。 编辑 – 好的。 我已经知道String.hashcode是可能的。 但不建议在任何地方使用。 实际上’如果不推荐任何其他方法 – 我是否应该使用它,如果我的对象在集合中,我需要哈希码。 我应该将其连接到另一个字符串以使其更成功吗?

Java将4个字节转换为int

我想知道这里记录的解决方案是否仍然是解决方案,还是有其他方式从4个字节获取一个int? 谢谢。 编辑:我从套接字.read获取byte [] 编辑: int recvMsgSize = in.read(Data, 0, BufferSize); 如果recvMsgSize为-1,我知道连接已被删除。 我在使用DataInputStream而不是InputStream时如何检测到这一点? 谢谢。 编辑:对于接受正确答案的yoyo道歉。 但是在mihi更新了最终响应之后,看起来该方法是可靠的并且减少了扩展编码,并且在我看来是最佳实践。

通过未经检查的类型转换在Java中创建通用数组

如果我有一个generics类Foo ,我不允许创建一个数组,如下所示: Bar[] bars = new Bar[]; (这将导致错误“无法创建Bar的通用数组”)。 但是,正如dimo414在回答这个问题(Java如何:通用arrays创建)中所建议的那样 ,我可以做到以下几点: Bar[] bars = (Bar[]) new Object[]; (这将“仅”生成警告:“类型安全:从Object []到Bar []”的未选中的强制转换。 在回应dimo414的回答的评论中,有些人声称使用这种结构可能会在某些情况下引起问题而其他人说它很好,因为对数组的唯一引用是bars ,它已经是所需的类型。 我有点困惑,在哪些情况下这是可以的,在哪些情况下,它可以让我遇到麻烦。 例如, newacct和Aaron McDaid的评论似乎直接相互矛盾。 不幸的是,原始问题中的评论流只是以未解答的“为什么这个’不再正确’?”结束,所以我决定为它提出一个新问题: 如果bars只包含Bar类型的条目,那么在使用数组或其条目时是否仍然存在任何运行时问题? 或者是唯一的危险,在运行时我可以在技术上将数组转换为其他东西(如String[] ),然后允许我用除Bar之外的类型的值填充它? 我知道我可以使用Array.newInstance(…) ,但我对上面的类型转换构造特别感兴趣,因为,例如,在GWT中newInstance(…) option不可用。

通过reflection和使用Class.cast()

可能重复: Java Class.cast()与强制转换运算符 我没有成功地试图找出Class.cast()做什么或它可能有什么好处,同时我想知道我是否可以通过reflection以某种方式投射对象。 首先,我认为下面的行可能是错误的: Object o = “A string”; String str = Class.forName(“java.lang.String”).cast(object); 但如果没有明确的演员,它就行不通。 那么什么是Class类的cast方法呢? 它是否有可能只是通过reflection来投射对象,所以你找到对象的类,在它上面使用Class.forName并以某种方式投射它?

Java将“.class”-operator用于generics类型,例如List,“Class <List >”和“Class <List >”

我使用.class -operator将有关包含类型的信息提供给generics类。 对于非generics包含的类型,例如Integer.class ,这没有任何问题。 但是由于包含的类型是通用的,例如List.class或List.class它会导致关于类转换的编译时错误。 有办法规避错误,但我很好奇这里发生了什么。 有人可以解释发生了什么吗?为什么事情就像它们一样?以及解决问题的最佳方法是什么? 以下行演示了此问题:请注意,外部generics类型需要Class作为参数,因此在本例中为Class<List> 。 Class tInt = Integer.class; // Works as expected. Class tList = List.class; // Works with warning, but is not // what i’m looking for. Class<List> tListInt1 = List.class; // Error Class<List> tListInt2 = (Class<List>) List.class; // Error Class<List> tListGeneric = (Class<List>) List.class; // Error 下一行有效: Class<List> […]