在Java中使用泛型消除强制类型转换

假设类X有一个getObject方法,返回一个Object类型的数据:

public class X
{
    public Object getObject(...)
    {
        ...
        return obj;
    }
}

使用X的代码如下:

X x = ...;
A a = (A) x.getObject(...);
B b = (B) x.getObject(...);
C c = (C) x.getObject(...);

可以看到,在程序中出现了很多强制类型转换,看起来很不美观。那么如何消除这些类型转换呢?

可以将XgetObject方法改写成下面这样:

public class X
{
    public <T> T Object getObject(...)
    {
        ...
        return (T) obj;
    }
}

这样,在使用X时,就无需强制类型转换了:

X x = ...;
A a = x.getObject(...);
B b = x.getObject(...);
C c = x.getObject(...);

为了消除getObject的编译器警告,可以加上SuppressWarnings注解:

public class X
{
    @SuppressWarnings("unchecked")
    public <T> T Object getObject(...)
    {
        ...
        return (T) obj;
    }
}
posted @ 2021-02-08 10:22  baiyuxuan  阅读(744)  评论(0编辑  收藏  举报