-1

我想编写一个函数,这样我将有 2 个对象,我将尝试合并它们,如果第 2 个对象不为空,则返回第 2 个。否则返回第一个对象(不管它是否为空。

这是我想出的代码:

public <T> T merge (Class<T> x, Class<T> y){
    if (y!= null) return (T) y;
    else return (T) x;
}

但我收到一个关于强制转换的警告:类型安全:从 Class 到 T 的未经检查的强制转换

我想知道这是否应该是编写它的正确方法,还是有更好的方法?

如果传递的 2 个对象来自同一个类,那么我将只返回第二个类。也可能是类和空值的情况,我想返回类不为空的情况。如果两个类都是空的,那么我只会返回空。

没有其他情况可以让我通过 2 个不同的课程。

4

2 回答 2

5

将您的方法更改为:

public <T> T merge (T x, T y){
    if (y!= null) return y;
    else return x;
}

您的原始方法接受类型为“Class”的变量,但您返回的是 T 类型的对象。因此编译器会警告您有关类型转换的安全性。

于 2013-08-09T18:10:17.317 回答
1

为什么您的参数列表使用Class<T>而不是 just T

您想返回 的实例T,而不是T class.

编译器警告您,因为您没有返回预期的内容。

这是一个工作示例:

public <T> T merge (T x, T y){
   if (y != null) {
    return y;
   }
   else {
        T merged = null;
        // TODO merge code
        return merged;
   }
}
于 2013-08-09T18:08:34.107 回答