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