我创建了一个方法,如下所示
static <N> N addTwoString(N a, N b){
StringBuilder sb = new StringBuilder();
sb.append(a);
sb.append(b);
return sb.toString();
}
public static void main(String[] args)
{
addTwoString("a", "b");
}
对于这种情况,我传递两个字符串并追加它并使用StringBuilder返回它。 无论如何,我在return语句中收到错误类型不匹配:无法从String转换为N 。 我的问题是这个方法接受字符串值(甚至类型是N)没有任何问题,但为什么它在return语句中给出错误?
答案 0 :(得分:5)
sb.toString()
将始终返回一个字符串,另一方面,您的方法应返回N类型。
根据您的方法考虑addTwoString(1,2)
,这应该返回Integer,但sb.toString()
是一个String。这就是编译错误的原因。
答案 1 :(得分:1)
为什么在这里使用泛型?
static String addTwoString(String a, String b){
StringBuilder sb = new StringBuilder();
sb.append(a);
sb.append(b);
return sb.toString();
}
除此之外,你为什么还需要这种方法呢?相反,您可以使用a.concat(b)
或a + b
!
答案 2 :(得分:1)
N不是字符串。但是,您尝试将字符串作为N传递,并且您还返回一个字符串但返回类型为N.
我知道你正在学习泛型,但是你想要做的事情告诉我你还没有理解基础知识。
通读这些 -
答案 3 :(得分:1)
class Test
{
public static void main(String[] args)
{
addTwoString("a", "b");
}
static <N> String addTwoString(N a, N b){
StringBuilder sb = new StringBuilder();
sb.append(a);
sb.append(b);
return sb.toString();
}
}
如果您确定该函数只返回String类型并且转换为返回(N)sb.toString();返回类型应该是String而不是泛型版本。也会有效。
答案 4 :(得分:0)
如果您确实想使用泛型,请将类型转换return sb.toString();
转换为return (N)sb.toString();
但是你的方法应该返回。不确定为什么你想要Generic for String?
答案 5 :(得分:0)
问题是您没有为N
传递类型参数。
你这样做:
addTwoString("a", "b");
虽然你应该这样做:
MyClass.<String>addTwoString("a", "b");
备注1 :我认为这里存在设计缺陷。您的方法表示它正在使用String
s,因此您不需要N
类型参数。这是正确的方法:
static String addTwoStrings(String a, String b){
StringBuilder sb = new StringBuilder();
sb.append(a);
sb.append(b);
return sb.toString();
}
备注2 :我认为你不应该在这里重新发明轮子。如果这不是家庭作业,你最好使用内置方法添加两个字符串(concat(String)
)