Ran*_*ku' 6 java generics methods
如何使用具有两个参数的方法,两个参数具有相同的具体类型?
例如,
boolean equals(Object a, Object b)
Run Code Online (Sandbox Code Playgroud)
允许a
任何类型和b
任何类型.
我想强制这样,a
并b
具有相同的具体类型.我试过了
<T> boolean equals(T a, T b)
Run Code Online (Sandbox Code Playgroud)
并输入a Date
和a String
到该方法,期望编译时错误,但我没有错误,因为T将解析? extends Serializable & Comparable
,因为两者Date
和String
实现Serializable
和Comparable
.
基本上你不能.没有办法做到这一点.即使您可以通过简单的调用来禁止不同类型的参数,也可以使用强制转换来绕过它:
equals((Object) date, (Object) string)
Run Code Online (Sandbox Code Playgroud)
如果您对参数的执行时类型感兴趣,则只能在执行时测试它.编译器无法知道类型的参数是否Date
具有对精确的java.util.Date
或某个子类的引用的值.