Java中具有两个泛型的方法

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

我有一个问题,想问你们为什么这段代码不起作用,我如何在不删除泛型或方法的情况下让它起作用。我认为这是因为方法不能重载,因为s和T可以是相同的类型,对吗?但我仍然不知道如何让它工作。谢谢大家!

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类型..因此基本上它们都是泛型类型..这不是重载您不能期望它工作。
    new GenericFail()应该调用哪些方法。doAnything(42)
    ?您应该从一开始就提供解释!谢谢!!CharSequence类似于String类型吗?如果我只为S添加扩展CharSequence,而将T保留为泛型类型,是否可能?欢迎:)
    CharSequence
    String
    类后面的接口。声明两种类型中的一种更具体的类型确实足够了。在泛型擦除之后,您的示例中将有两个不同的方法:
    doAnything()
    ,其中
    Object
    作为参数的声明类型和
    doAnything()
    使用
    CharSequence
    作为参数的声明类型。@Yahya我认为这已经足够了。OP可以挖掘主题,如果他/她愿意。这并不能回答他的问题!@Yahya我认为他的主要问题是“如何使它工作”。我提供了两个选项。我错过了什么吗?