Java泛型对具有多个类类型的单个参数进行通配符

Java泛型对具有多个类类型的单个参数进行通配符,java,generics,wildcard,Java,Generics,Wildcard,我有办法。 它接受一个参数,它可以是提供程序或字符串类的对象。 现在,如果我告诉该方法接受对象,那么我可以传递它Provider或String对象,但我想使用泛型使其类型安全,并且只传递Provider或String。我该怎么做,可能吗? 我想实现这样的目标: public <T can be String or Provider> void myMethod(T value) public void myMethod(T值) 我看了一下,但它在我的情况下不起作用,因为提供者或字

我有办法。 它接受一个参数,它可以是
提供程序
字符串
类的对象。 现在,如果我告诉该方法接受对象,那么我可以传递它
Provider
String
对象,但我想使用泛型使其类型安全,并且只传递
Provider
String
。我该怎么做,可能吗?
我想实现这样的目标:

public <T can be String or Provider> void myMethod(T value)
public void myMethod(T值)
我看了一下,但它在我的情况下不起作用,因为
提供者
字符串
都不是接口。

您不应该(也不能)为此使用泛型。相反,只需提供两个重载方法:

public void myMethod(String value);
// and
public void myMethod(Provider value);

因为两者都需要不同的处理方式,所以这种方式实际上更简单。

不,这是不可能的。简单地使用两个重载方法怎么样

public void myMethod(String value)
public void myMethod(Provider value)

为什么确切地说是“提供者”或“字符串”?他们有什么共同点使你的方法对他们都有效?例如,两者是否具有可比性?然后您应该在其中使用
Comparable
。如果他们没有共同点,也许有一个原因,你不能做你想做的事。在这种情况下,正如其他人所建议的那样,只需使用重载。

我曾考虑过重载选项,但因为在我的方法中这两个选项的处理方式相同,所以我想知道这是否可以通过泛型实现。如果无法完成,那么我现在将使用重载。谢谢您的回答。@HarshadVyawahare:您如何以完全相同的方式处理
String
Provider
?他们(可能)没有分享任何有趣的方法。你到底是怎么处理这些东西的?你能举一个例子,用同样的方法处理它们吗?我从myMethod调用另一个方法,这个方法重载为接受“Sting”或“Provider”。这是我对这两个对象的唯一使用。因此,您确实调用了两个不同的方法(是的,重载方法仍然是不同的方法)。无论如何,你不能用一个方法来实现这一点(或者你需要一个丑陋的
if(value instanceof String)
check)。相反,将这两个方法的公共代码移到另一个(可能是私有/受保护的)方法中,并将对公共方法中另一个重载方法的调用与对“真实代码”方法的调用一起保留。@HarshadVyawahare:Java在运行时并不决定这一点:重载方法之间的选择总是在编译时决定的。只有重写的方法才能在运行时执行不同的代码。谢谢您的回答!好的,如果通过泛型无法实现这一点,那么我将使用重载.inflagranti-共同点是,它们(无论是
String
还是
Provider
)都可以作为参数传递给我在
myMethod
中调用的方法,我想调用的方法的实现是使用重载完成的?