Java中具有两个泛型的方法
我有一个问题,想问你们为什么这段代码不起作用,我如何在不删除泛型或方法的情况下让它起作用。我认为这是因为方法不能重载,因为s和T可以是相同的类型,对吗?但我仍然不知道如何让它工作。谢谢大家!Java中具有两个泛型的方法,java,generics,polymorphism,Java,Generics,Polymorphism,我有一个问题,想问你们为什么这段代码不起作用,我如何在不删除泛型或方法的情况下让它起作用。我认为这是因为方法不能重载,因为s和T可以是相同的类型,对吗?但我仍然不知道如何让它工作。谢谢大家! public class GenericFail<S,T> { public void doAnything(S sValue){ System.out.println("Doing anything with S"); } public void do
public class GenericFail<S,T> {
public void doAnything(S sValue){
System.out.println("Doing anything with S");
}
public void doAnything(T sValue){
System.out.println("Doing anything with T");
}
}
公共类GenericFail{
公共无效做任何事情(S值){
System.out.println(“用S做任何事情”);
}
公共无效做任何事(T值){
System.out.println(“用T做任何事情”);
}
}
编译后,泛型类型将被删除。
因此这两个doAnything()
方法具有相同的签名:
doAnything(Object object)
因为S
和T
没有显式地从更具体的类型派生
要解决此问题,请将方法名称更改为具有两个不同的名称,或使S
和T
派生自特定类型,例如:
public class GenericFail<S extends CharSequence, T extends Number> {
公共类GenericFail{
由于类型擦除,这两种方法具有相同的签名,这在java中是不允许的。您需要使用一种变通方法
您的选择:
- 通过添加类型边界更改泛型类型的擦除
class GenericFailType参数命名约定:T表示类型,而S、U、V等-2、3、4类型..因此基本上它们都是泛型类型..这不是重载您不能期望它工作。
?您应该从一开始就提供解释!谢谢!!CharSequence类似于String类型吗?如果我只为S添加扩展CharSequence,而将T保留为泛型类型,是否可能?欢迎:)new GenericFail()应该调用哪些方法。doAnything(42)
是CharSequence
类后面的接口。声明两种类型中的一种更具体的类型确实足够了。在泛型擦除之后,您的示例中将有两个不同的方法:String
,其中doAnything()
作为参数的声明类型和Object
使用doAnything()
作为参数的声明类型。@Yahya我认为这已经足够了。OP可以挖掘主题,如果他/她愿意。这并不能回答他的问题!@Yahya我认为他的主要问题是“如何使它工作”。我提供了两个选项。我错过了什么吗?CharSequence