我用很少的方法创建了一个通用类。我只想调用该方法并添加值,但是它不起作用。这是代码

public interface GenericInterface<T> {
    public T getValue();
    public  void setValue(T t);
}

public class FirstGeneric<T> implements GenericInterface<T> {
    private T value;

    public FirstGeneric(T _value) {
        this.value = _value;
    }

    @Override
    public T getValue() {
        return value;
    }

    @Override
    public void setValue(T t) {
        this.value = t;
    }

    @SuppressWarnings("unchecked")
    public static <T> T addValues(FirstGeneric<T> myGeneric, FirstGeneric<T> myGeneric1) {
        T result = null;
        if (myGeneric != null && myGeneric1 != null) {
            T t1 = myGeneric.getValue();
            T t2 = myGeneric1.getValue();
            result = (T) t1.toString().concat(t2.toString());
            System.out.println("Result is:=" + result);
        }
        return result;
    }

    public static void main(String args[]) {
        Integer int1 = 1;
        FirstGeneric<Integer> myInt = new FirstGeneric<Integer>(int1);
        String value = "Hello";
        FirstGeneric<String> myString = new FirstGeneric<String>(value);
        addValues(myString,  myInt);
    }
}


但是我在最后一行收到编译错误。

类型为FirstGeneric的方法addValues(FirstGeneric,FirstGeneric)不适用于参数(FirstGeneric,FirstGeneric)

我做错了什么?
谢谢。

最佳答案

addValues有一个通用类型参数,这意味着您不能同时传递FirstGeneric<Integer>FirstGeneric<String>

为了使addValues(myString, myInt)调用有效,您可以在方法中定义两个通用类型参数:

public static <T,U> String addValues(FirstGeneric<T> myGeneric, FirstGeneric<U>
   myGeneric1) {
    String result = null;
    if (myGeneric != null && myGeneric1 != null) {
        T t1 = myGeneric.getValue();
        U t2 = myGeneric1.getValue();
        result = t1.toString().concat(t2.toString());
        System.out.println("Result is:=" + result);
    }
    return result;
}


请注意,我将返回类型更改为String,因为它显然是String(由t1.toString().concat(t2.toString())产生),因此您不能将其强制转换为T,并希望T将是String

10-08 13:23