日期:2014-05-20  浏览次数:20680 次

关于对象类型转换的一个问题
我现在的需要是:定义一个类型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的任何东西前面