Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基本java模板方法_Java_Templates - Fatal编程技术网

基本java模板方法

基本java模板方法,java,templates,Java,Templates,我想写一个函数,这样我将有两个对象,我将尝试合并它们,如果第二个对象不是null,则返回第二个。否则返回第一个对象(不管它是否为null) 下面是我想到的代码: public <T> T merge (Class<T> x, Class<T> y){ if (y!= null) return (T) y; else return (T) x; } 公共T合并(x类,y类){ 如果(y!=null)返回(T)y; 否则返回(T)x; } 但我

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

下面是我想到的代码:

public <T> T merge (Class<T> x, Class<T> y){
    if (y!= null) return (T) y;
    else return (T) x;
}
公共T合并(x类,y类){
如果(y!=null)返回(T)y;
否则返回(T)x;
}
但我得到了一个关于演员的警告: 类型安全:未选中从类转换为T

我想知道这是否是写它的正确方式,还是有更好的方式

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


没有其他情况下我会在两个不同的类中通过。

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

您希望返回
T
的实例,而不是
T

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

下面是一个工作示例:

public <T> T merge (T x, T y){
   if (y != null) {
    return y;
   }
   else {
        T merged = null;
        // TODO merge code
        return merged;
   }
}
publictmerge(tx,ty){
如果(y!=null){
返回y;
}
否则{
T=null;
//TODO合并代码
返回合并;
}
}

将您的方法更改为:

public <T> T merge (T x, T y){
    if (y!= null) return y;
    else return x;
}
publictmerge(tx,ty){
如果(y!=null)返回y;
否则返回x;
}

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

您的参数不是T类型,而是T类类型,但您不是返回此参数,而是返回T实例--这有很大的区别。您的意思是返回:
返回y.newInstance()
和visa反之亦然?至少可以说,您的代码和问题很混乱。更改类型为
T
not
Class
(我假设您希望返回对象而不是类)或
返回(y==null)?x:y