java类型转换错误 30

importjava.util.*;className{privateStringfirstName,lastName;publicName(StringfirstNam... import java.util.*;
class Name{
private String firstName,lastName;
public Name(String firstName,String lastName){
this.firstName=firstName;
this.lastName=lastName;
}
public String getFirstName(){return firstName;}
public String getLastName(){return lastName;}
public String toString(){return firstName+""+lastName;}
public boolean equals(Object obj){
if(obj instanceof Name){
Name name = (Name)obj;
return (firstName.equals(name.firstName))&&(lastName.equals(name.lastName));
}
return super.equals(obj);
}
public int hashCode(){
return firstName.hashCode();
}
}
public class BasicContainer {
public static void main(String args[]){
Collection c = new HashSet();
c.add("hello");
c.add(new Name("f1","l1"));
c.add(new Name("fffff","lllll"));
for(Iterator i = c.iterator();i.hasNext();){
Name name=(Name)i.next();
if(name.getFirstName().length()<3)
//用Iterrator遍历,只能用Iterrator的方法,不能是c.remove()
i.remove();
}
System.out.println(c);
}
}

报错:Exception in thread "main" java.lang.ClassCastException: java.lang.String cannot be cast to Name
at BasicContainer.main(BasicContainer.java:29)
首先我是初学者..
1.为什么String不能转化为Name类型?请不要直接说“String类型肯定不能转换成你自己定义的Name类型.“
2.可以怎样修改呢?请给出代码。谢谢
展开
 我来答
北京巴卜技术有限公司
2018-07-05 · 【免费测试,验证码5秒必达】
北京巴卜技术有限公司
北京巴卜技术有限公司(以下简称巴卜)是具备国际水准的移动商务平台技术和应用方案提供商。自成立以来,巴卜始终 致力于为国内外企业提供具备国际技术水准的移动商务平台及运营服务。
向TA提问
展开全部
通常使用强制类型转换将父类型转换成子类型时,是不会有编译错误的,只会有运行时抛出ClassCast的异常,如果编译提示错误,那肯定是因为你转换的时候类型就匹配,被转换的对象和目标类型不是子父类/接口实现类的关系,自然编译不通过
张川1990
2013-08-17 · TA获得超过362个赞
知道小有建树答主
回答量:158
采纳率:0%
帮助的人:152万
展开全部
iterator 是游标遍历的,这个游标同一时间只指向一个对象 也就是你for循环.next就是游标移动一个位置指向一个对象 你删除的时候也是删的这个对象。Ok?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
无爱无伤乐园
2013-08-18
知道答主
回答量:4
采纳率:0%
帮助的人:5818
展开全部
如果只是一个对象,那么就会默认移除这个,或者你可以在括号里面加this,应该也可以的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
y66901356
推荐于2018-04-27 · 超过23用户采纳过TA的回答
知道答主
回答量:67
采纳率:100%
帮助的人:48.7万
展开全部
1、强制类型转换只发生在继承的情况下把子类实例转成父类实例,String类显然没有继承你的Name类。。。
2、 Object name = i.next();
//不是Name类型,或者firstName长度小于3的就删

if(!(name instanceof Name) || ((Name)name).getFirstName().length()<3)
i.remove();
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
般若兮若
2013-08-17 · TA获得超过2706个赞
知道小有建树答主
回答量:1246
采纳率:0%
帮助的人:943万
展开全部
首先HashSet里面存放的都是String类型,而Name是你自定义的类型,因此String类型无法被转换为Name类型会报错.
迭代器是类似于指针,直接指向某个对象,因此无需传入参数就知道指向的是谁
追问
为什么这里不能用 改呢?强制转换呢?这个代码可以
追答
String类型肯定不能转换成你自己定义的Name类型.
对于HashSet想要修改只能是先删除再修改然后重新添加.如果直接对对象进行修改则有可能破坏整个集合的存储结构.HashSet本身是根据hashCode进行分组的,本来这个位置该放的是按位与分组组数为1的数,结果变成按位与分组组数为3的数了,必然不可以.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式