java.lang.ClassCastException: java.lang.Float cannot be cast to java.lang.String
Solution 1
From your comment it appears you are using an incorrect generic type.
e.g.
Vector g = new Vector();
List list = new ArrayList();
list.add(1.0f);
g.add(list);
Vector<List<String>> grid = g; // incorrect cast, but only a warning.
String s = g.elementAt(0).get(0); // throws a class cast exception.
BTW: I have no idea why you would use a combination of elementAt(index) and get(index) as these are the old (pre Java 1.2) and newer styles (post Java 1.2) unless Swing requires it. ;)
I would use this to reverse an incorrect generic type, although fixing the type would be better.
List list = (List) data_ForSave.elementAt(r);
String colValue= String.valueOf(list.get(ColValindex));
as you cannot cast a Float to a String. You can instead turn it into a String.
Solution 2
The problem is that data_ForSave.elementAt(r).get(ColValindex)
is returning a Float
, not a String
. If you want to format it as a string — e.g., you want 3.45
to be converted to "3.45"
, then you can write:
String colValue= data_ForSave.elementAt(r).get(ColValindex).toString();
Solution 3
Change the declaration of data_ForSave
to
Vector<String> data_ForSave = new Vector<String>();
and your IDE should guide you to the source of this problem through errors or warnings.
Syed Muhammad Mubashir
Syed Muhammad Mubashir Masters (CS) NUCES FAST Spring 2011. Graduation (CS) DCS KU Fall 2006 Working as Team Lead Backend/Database Development as Altpay. Worked as an Senior Software Engineer/Team Lead at Higher Visibility. Worked as an Team Lead at Higher Visibility. Worked as an Assistant IT Manager at Anila Gems Int. Worked as technical ERP consultant at VIBE TECHNOLOGIES. Jun 2008- Jun 2011 Worked as Lab Instructor at Fast-NU Fall 2010.
Updated on June 05, 2022Comments
-
Syed Muhammad Mubashir almost 2 years
java.lang.ClassCastException: java.lang.Float cannot be cast to java.lang.String
I am getting this exception in follwing code:
String colValue= (String)data_ForSave.elementAt(r).get(ColValindex);
Where
ForSave
is a vector of String containing table values, I can not understant why this exception is thrown.Below is the full Stack Trace of the excption.
Stack Trace Of Exception
java.lang.ClassCastException: java.lang.Float cannot be cast to java.lang.String at Utilities.Utility.DataHeaderMapping(Utility.java:1122) at jewelleryerpapplication.GUI.ProductsInformation.jbtnSaveActionPerformed(ProductsInformation.java:4222) at jewelleryerpapplication.GUI.ProductsInformation.access$1500(ProductsInformation.java:40) at jewelleryerpapplication.GUI.ProductsInformation$37.actionPerformed(ProductsInformation.java:3292) at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018) at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341) at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259) at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252) at java.awt.Component.processMouseEvent(Component.java:6505) at javax.swing.JComponent.processMouseEvent(JComponent.java:3321) at java.awt.Component.processEvent(Component.java:6270) at java.awt.Container.processEvent(Container.java:2229) at java.awt.Component.dispatchEventImpl(Component.java:4861) at java.awt.Container.dispatchEventImpl(Container.java:2287) at java.awt.Component.dispatchEvent(Component.java:4687) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422) at java.awt.Container.dispatchEventImpl(Container.java:2273) at java.awt.Window.dispatchEventImpl(Window.java:2713) at java.awt.Component.dispatchEvent(Component.java:4687) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:707) at java.awt.EventQueue.access$000(EventQueue.java:101) at java.awt.EventQueue$3.run(EventQueue.java:666) at java.awt.EventQueue$3.run(EventQueue.java:664) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87) at java.awt.EventQueue$4.run(EventQueue.java:680) at java.awt.EventQueue$4.run(EventQueue.java:678) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) at java.awt.EventQueue.dispatchEvent(EventQueue.java:677) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105) at java.awt.EventDispatchThread.run(EventDispatchThread.java:90) Row : 0
Lots of thanks in advance for providing an answer as i am stuck with that.
-
Vishy about 12 yearsIn that case, the cast is redundant and the generic type for your collection is incorrect. I have edited my solution.
-
ruakh about 12 yearsWhen the OP wrote, "
ForSave
is a vector ofString
containing table values", that meant, "ForSave
is a vector of table values that containString
s". -
Syed Muhammad Mubashir about 12 yearsYour solution generating the same error when i applied. Thanks
-
Syed Muhammad Mubashir about 12 yearsYes obviously Vector<Vector<String>> data_ForSave = new Vector<Vector<String>>(); is my declaration
-
Syed Muhammad Mubashir about 12 yearsVector<Vector<String>> data_ForSave = new Vector<Vector<String>>(); is my declaration
-
Vishy about 12 yearsSo in this collection you have added a Float using an unchecked operation. When you try to retrieve it, there is an exception. I have added a workaround if you cannot find where the Float is being added, but its better to fix it so this doesn't happen.
-
Louis Wasserman about 12 yearsEven if it's specified as a
Vector<String>
, you might be doing some evil unsafe casting somewhere to make it contain aFloat
. The exception you're getting proves the vector contains aFloat
, whether or not it's supposed to; if it's not supposed to contain floats, then that's what you need to debug. -
Syed Muhammad Mubashir about 12 yearsGreat thanks to you for taking the time as your new answer solve my problem.(:-
-
Syed Muhammad Mubashir about 12 yearsbut problem is that I am using vector which is binded with the data model of my jtable tell me how ca i use array list in this case
-
Andreas Dolk about 12 yearsYikes - "string containing table values" - I (mis)understood "string(s) containing table values". Anyway -
Vector
should be parametized. -
Howard Schutzman about 12 yearsI find it hard to believe that this solution did not work. The answer is correct in that Java will not allow you to directly cast a Float object to a String. Try the following statement: String s = new Float(1.23).toString(); This should work fine, and is basically what the answer is telling you to do. However, the statement String s = (String) new Float(1.23) will result in a CastClass exception.
-
ruakh about 12 years@HowardSchutzman: The reason it didn't work is that generics in Java use "type erasure", whereby type parameters don't exist at runtime. The OP had inserted a
Float
into an object of runtime typeVector
, and was trying to retrieve the element via a reference with compile-time typeVector<String>
(thereby triggering an implicit cast toString
). The explicitString
cast was a red herring. -
Vishy about 12 yearsSwing is one of the few libraries which need the older collections like Vector and Hashtable :(