读书人

关于对象类型转换的一个有关问题

发布时间: 2013-12-16 23:49:16 作者: rapoo

关于对象类型转换的一个问题
我现在的需要是:定义一个类型A,可以把几乎任何类型赋值给A,我就可以把A作为结果传递到别的地方,然后在别的地方再把类型转换回来——使用强制转换——使用它。
我就把这个A设为Object,传递String的时候没有问题,接收的地方使用强制转换(String)。但是碰到了个HashMap<String, String>,编译的时候就警告了,虽然不影响运行。我想采用个没有警告的方案。

警告: [unchecked] 未经检查的转换
Map<String, String> urls = (HashMap<String, String>) chunk.body;
需要: HashMap<String,String>
找到: Object

不知道泛型可不可以,T、V等等是什么意思,有什么区别?
[解决办法]
这种警告是不能避免的,想把父类转成任何子类都会有这个警告,只要你知道你的方法获取到
的会是怎样的类型,保证程序运行时不会抛ClassCastException就行。
[解决办法]
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

Quote: 引用:

Quote: 引用:

Quote: 引用:


public class A<T>
{
private T obj;

public void setObj(T obj) {
this.obj = obj;
}

public T getObj() {
return obj;
}


}


泛型是需要你指定某种类型的,如果你要A能传递任何对象就要指定泛型为Object,例如:A<Object> a = new A<Object>(); 这样你就能传递任何对象而没有警告了
接收到后怎么使用呢?Object.?我要传递HashMap<String, String>!


直接set进去 取的时候get就行了啊 你试了么?


import java.util.HashMap;

public class NewMainTest<T> {

private T obj;

public void setObj(T obj) {
this.obj = obj;
}

public T getObj() {
return obj;
}

/**
* @param jsonArray the command line arguments
*/
public static void main(String args[]) throws Exception {
NewMainTest nmt = new NewMainTest<>();
HashMap<String, String> map = new HashMap<>();
nmt.setObj(map);
HashMap<String, String> map1 = (HashMap<String, String>) nmt.getObj();
//map1.get;
}
}
警告啊。


那就只能加注解了
怎么加注解?

@SuppressWarnings("unchecked")可以加在一行代码的前面,只对一行起作用啊,好用!



嗯 看SuppressWarnings目标范围 @Target(value={TYPE,FIELD,METHOD,PARAMETER,CONSTRUCTOR,LOCAL_VARIABLE})
可以加在除了package和annotation的任何东西前面

读书人网 >J2SE开发

热点推荐