【问题标题】:java hashmap cannot convert object [duplicate]java hashmap无法转换对象[重复]
【发布时间】:2016-07-28 01:24:55
【问题描述】:

在 Hashmap 中,我发送了一个字符串和一个我自己的类对象作为参数,我已经成功发送了该参数,但是当我想要该对象时,它无法转换 它显示错误

Main.java:37:错误:不兼容的类型:对象无法转换为 Bikede

Bikede obb= e.getValue();

import java.util.*;
import java.lang.*;
import java.io.*;

class Bikede
    {
        int bikeno;
        boolean vacancy;
        public Bikede(int a,boolean b)
        {
            bikeno=a;
            vacancy=b;
        }

    }
class Ideone
{

    public static void main (String[] args) throws java.lang.Exception
    {
        Scanner obj=new Scanner(System.in);
        int n=obj.nextInt();

        HashMap<String,Bikede> lh=new HashMap<String,Bikede>();

        for(int i=0;i<n;i++)
        {
        int bno;
        boolean parked;
        bno=obj.nextInt();
        parked =true;
        lh.put(""+i,new Bikede(bno,parked));
        }
        for(Map.Entry e:lh.entrySet())
        {

            Bikede obb= e.getValue();
            System.out.println(obb.bikeno);
        }

    }
}

【问题讨论】:

  • 在哪里可以找到结果请帮忙

标签: java collections hashmap linkedhashmap


【解决方案1】:

将您的 Map.Entry 更改为此。使用像 Eclipse 这样的真正 IDE,它会自动识别此类错误并推荐解决方案(大多数情况下,这些解决方案是有效的)。

从Java 泛型的角度来看,这是一个对Entry 进行参数化的问题。它在那里声明的方式,它没有参数化。它应该被转换为Bikede 或参数化。由于泛型更安全且避免使用ClassCastException,因此我选择了该解决方案。

for (Entry<String, Bikede> e : lh.entrySet()) {
    Bikede obb = e.getValue();
    System.out.println(obb.bikeno);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-01
    • 1970-01-01
    • 2016-09-04
    • 1970-01-01
    • 2010-10-21
    • 2013-05-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多