我创建了一个函数
public <T> void someFunction(T object) {
object.someMethod();
}
我有两个类具有相同的 someMethod()函数定义。我必须通过传递参数来调用函数,这两个类的对象取决于提供的输入。
答案 0 :(得分:5)
由于T
没有类型边界,编译器无法知道该参数是否会被具有someMethod
方法的类替换。
您可以添加类型绑定:
public <T extends HasSomeMethod> void someFunction(T object) {
object.someMethod();
}
其中HasSomeMethod
是包含someMethod
方法的接口,以及具有someMethod
的两个类实现该接口。 (如果HasSomeMethod
是你的两个类的超类,它也会有效,它包含someMethod
方法(抽象或不抽象)。
编辑:
包装PreparedStatement的一个例子:
public class MyStatement implements HasSomeMethod
{
PreparedStatement stmt;
public MyStatement (PreparedStatement stmt) {
this.stmt = stmt;
}
public void someMethod ()
{
stmt.someMethod ();
}
}
现在,如果你有PreparedStatement
个实例,你可以写:
PreparedStatement ps = ...
MyStatement my = new MyStatement(ps);
并将my
传递给您的someFunction
方法。