调用Generic方法java的编译器错误

时间:2018-03-26 08:34:34

标签: java generics

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

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)

我做错了什么? 感谢。

1 个答案:

答案 0 :(得分:4)

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