java.lang.ClassCastException: java.lang.Float cannot be cast to java.lang.String

13,918

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.

Share:
13,918
Syed Muhammad Mubashir
Author by

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, 2022

Comments

  • Syed Muhammad Mubashir
    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
    Vishy about 12 years
    In that case, the cast is redundant and the generic type for your collection is incorrect. I have edited my solution.
  • ruakh
    ruakh about 12 years
    When the OP wrote, "ForSave is a vector of String containing table values", that meant, "ForSave is a vector of table values that contain Strings".
  • Syed Muhammad Mubashir
    Syed Muhammad Mubashir about 12 years
    Your solution generating the same error when i applied. Thanks
  • Syed Muhammad Mubashir
    Syed Muhammad Mubashir about 12 years
    Yes obviously Vector<Vector<String>> data_ForSave = new Vector<Vector<String>>(); is my declaration
  • Syed Muhammad Mubashir
    Syed Muhammad Mubashir about 12 years
    Vector<Vector<String>> data_ForSave = new Vector<Vector<String>>(); is my declaration
  • Vishy
    Vishy about 12 years
    So 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
    Louis Wasserman about 12 years
    Even if it's specified as a Vector<String>, you might be doing some evil unsafe casting somewhere to make it contain a Float. The exception you're getting proves the vector contains a Float, 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
    Syed Muhammad Mubashir about 12 years
    Great thanks to you for taking the time as your new answer solve my problem.(:-
  • Syed Muhammad Mubashir
    Syed Muhammad Mubashir about 12 years
    but 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
    Andreas Dolk about 12 years
    Yikes - "string containing table values" - I (mis)understood "string(s) containing table values". Anyway - Vector should be parametized.
  • Howard Schutzman
    Howard Schutzman about 12 years
    I 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
    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 type Vector, and was trying to retrieve the element via a reference with compile-time type Vector<String> (thereby triggering an implicit cast to String). The explicit String cast was a red herring.
  • Vishy
    Vishy about 12 years
    Swing is one of the few libraries which need the older collections like Vector and Hashtable :(