小编Jin*_*nah的帖子

类型参数G隐藏类型G.

public class MyGenericClass< G> {


    public <G> G genericMethod1(G g){
        System.out.println(g.toString());
        return g;

    }

    public <X> G genericMethod2(G g) {
        System.out.println(g.toString());
        return g;
    }

    public <X> X genericMethod3(G g) {
        System.out.println(g.toString());
        Integer i = new Integer(100);
        return (X) i;       
    }


    public static void main(String... cmdarg) {

        MyGenericClass<Employee> gemp = new MyGenericClass<Employee>();
        Employee e1 = new Employee();
        e1.setName("My Name");


        String resultOfMethod3 = gemp.genericMethod3(e1);
        System.out.println(resultOfMethod3);                            

    }


}
Run Code Online (Sandbox Code Playgroud)

在genericMethod1:我得到编译器警告"类型参数G隐藏类型G".

问题: G隐藏哪个G?这是什么意思?

genericMethod2不显示任何错误/警告.

问题: 我认为不应该编译.为什么在同一方法签名中允许两种不同的类型?与G和X比较的典型实时示例是什么?

在genericMethod3中:我故意返回一个Integer对象,在main方法中我试图将结果赋给String.正如所料:我得到了ClassCastException.

问题:使用泛型来避免ClassCastExceptions不是最初的目的吗?为什么编译器允许它?这是泛型设计中的一个错误吗?

java generics

3
推荐指数
1
解决办法
161
查看次数

标签 统计

generics ×1

java ×1