鉴于以下不太有用的代码:
package com.something;
import java.util.ArrayList;
import java.util.Collection;
//Not a generic class!
public class Test {
public <T> void plain(T param1, T param2) {}
public <T> void fancy(T param1, Collection<T> param2) {}
public void testMethod() {
//No error
fancy("", new ArrayList<String>());
//Compiler error here!
fancy("", new ArrayList<Integer>());
//No error
plain("", new ArrayList<Integer>());
}
}
(如有错误,请纠正我的理解!)
第二次调用fancy()
是编译器错误,因为 Java 无法推断两个参数之间的任何公共类型(无法推断Object
,因为第二个参数必须是Collection
.)
调用plain()
不是编译器错误,因为 Java 推断出两个参数之间的公共类型Object
。
我最近遇到了具有类似于plain()
.
我的问题是这样的:
plain()
的签名对任何事情都有用吗?
也许编写该代码的人认为plain()
' 的签名会强制两个参数在编译时具有相同的类型,但显然情况并非如此。
编写带有类似签名的方法plain()
而不是仅仅将两个参数都定义为Object
s 有什么区别或好处吗?