Java Generics Wildcarding,用于具有多个类类型的单个param

Har*_*are 3 java generics wildcard

我有一个方法.它接受一个PARAM,它可以是所述的目的ProviderString类.现在,如果我告诉该方法接受Object然后我可以传递它ProviderString对象,但我想使用泛型使其类型安全并且只传递Provider或者String.我该怎么做,有可能吗?
我希望实现这样的目标:

public <T can be String or Provider> void myMethod(T value)
Run Code Online (Sandbox Code Playgroud)

我看了一下这个问题,但是在我的情况下它不起作用,因为没有Provider或是String一个接口.

Joa*_*uer 7

你不应该(也不能)使用泛型.而只是提供两个重载方法:

public void myMethod(String value);
// and
public void myMethod(Provider value);
Run Code Online (Sandbox Code Playgroud)

由于两者都需要进行一些不同的处理,因此这种方式实际上更简单.

  • @HarshadVyawahare:Java*不会在运行时决定这一点:重载方法之间的选择总是*在编译时决定.只有*overriden*方法才能导致在运行时执行不同的代码. (4认同)
  • 所以你*做*调用两个不同的方法(是的,重载方法仍然是不同的方法).无论如何,你不能用一个方法做到这一点(或者你需要一个丑陋的`if(value instanceof String)`check).而是将这两个方法的公共代码移动到另一个(可能是私有/受保护)方法中,并且只需调用公共方法中的另一个重载方法以及对"实际代码"方法的调用. (2认同)