通用方法调用混淆

时间:2015-12-17 07:51:00

标签: java generics dynamic

我创建了一个函数

public <T> void someFunction(T object) {
    object.someMethod();
}

我有两个类具有相同的 someMethod()函数定义。我必须通过传递参数来调用函数,这两个类的对象取决于提供的输入。

1 个答案:

答案 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方法。