2015-12-17 3 views
1

Я создал функциюОбщий вызов метода спутанность

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

У меня есть два класса, который имеет такую ​​же SomeMethod() определение функции. Мне нужно вызвать функцию, передав аргумент, объект этих двух классов зависит от предоставленного ввода.

+0

В чем вопрос; какая у вас проблема? –

+0

Мне нужно вызвать функцию двух классов в зависимости от введенного значения. Один класс встроен, а другой определен пользователем один. –

ответ

5

Поскольку T не имеет ограничений по типу, компилятор не может знать, будет ли этот параметр заменен классом, который имеет метод someMethod.

Добавить тип связанный:

pubic <T extends HasSomeMethod> void someFunction(T object) { 
    object.someMethod(); 
} 

Где HasSomeMethod это интерфейс, который содержит метод someMethod, и два класса, которые имеют someMethod реализовать этот интерфейс. (Он также будет работать, если HasSomeMethod супер-класс ваших двух классов, и он содержит метод someMethod (или реферата или нет)

EDIT:.

Пример оберточной 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 метод.

+0

Один объект имеет класс библиотеки java и другой класс, определенный пользователем. Итак, первый класс - это скомпилированный код. Итак, как мы можем реализовать один и тот же интерфейс для этих двух классов? –

+1

@AkhilSudhakaran Возможно, вы можете обернуть класс библиотеки вторым определяемым пользователем классом, который реализует интерфейс. – Eran

+0

вы можете объяснить подробно. Я просто новичок. Пример: PreparedStatement как встроенный класс и MyStatement как определенный пользователем класс –

Смежные вопросы