强制泛型方法的两个参数具有相同的具体类型

Ran*_*ku' 6 java generics methods

如何使用具有两个参数的方法,两个参数具有相同的具体类型?

例如,

boolean equals(Object a, Object b)
Run Code Online (Sandbox Code Playgroud)

允许a任何类型和b任何类型.

我想强制这样,ab具有相同的具体类型.我试过了

<T> boolean equals(T a, T b)
Run Code Online (Sandbox Code Playgroud)

并输入a Date和a String到该方法,期望编译时错误,但我没有错误,因为T将解析? extends Serializable & Comparable,因为两者DateString实现SerializableComparable.

Jon*_*eet 7

基本上你不能.没有办法做到这一点.即使您可以通过简单的调用来禁止不同类型的参数,也可以使用强制转换来绕过它:

equals((Object) date, (Object) string)
Run Code Online (Sandbox Code Playgroud)

如果您对参数的执行时类型感兴趣,则只能在执行时测试它.编译器无法知道类型的参数是否Date具有对精确java.util.Date或某个子类的引用的值.