2009-04-27 4 views
0

Я пытаюсь использовать Java API интерактивных брокеров, чтобы узнать, могу ли я сделать некоторую алгоритмическую торговлю (на бумаге изначально). Я хочу вызвать метод под названием ReqMktDepth(), который находится в классе с именем EClientSocket.Как создать экземпляр класса с конструктором, требующим объекта интерфейса

Для конструктора EClientSocket требуется объект типа AnyWrapper, а AnyWrapper - это интерфейс, не являющийся конкретным классом. Теоретически, как мне пройти прохождение класса AnyWrapper в конструктор EClientSocket.

ответ

6

Вам необходимо создать класс, который реализует AnyWrapper (используя ключевое слово «реализует»), а затем вы должны предоставить определения для любых методов, определенных этим интерфейсом.

Вот один простой учебник:

http://www.uweb.ucsb.edu/~cdecuir/Polymorphism.html

+0

Я использую API других компаний и не понимаю, что делают эти методы, может ли моя реализация быть пустым? – Ankur

+0

Это зависит от конкретного. Может существовать конкретный класс, который реализует AnyWrapper уже в стороннем API. По существу, он не может быть пустым, если AnyWrapper не пуст; то есть вы должны определить каждый метод, определенный интерфейсом, который вы хотите реализовать. – BobbyShaftoe

4

Вы можете создать свой собственный класс, который реализует интерфейс AnyWrapper как подсказывает Бобби. или использовать любой другой класс (присутствующий в библиотеке/jar/namespace), который уже распространяется на интерфейс AnyWrapper, такой как класс EWrapper, который уже имеет реализацию AnyWrapper.

см ->http://www.interactivebrokers.com/php/apiUsersGuide/apiguide/java/eclientsocket.htm

+0

:) Да, я об этом не думал. – BobbyShaftoe

+0

Спасибо, я пытался найти это целую вечность. – Ankur

2

Вы должны, вероятно, использовать некоторый класс в этом API вы используете, который реализует интерфейс AnyWrapper. Вы могли бы взглянуть на JavaDoc этого API или использовать функции IDE (что-то вроде show type hierarchy), чтобы выяснить, какие классы реализуют AnyWrapper и передать один из них.

2

Несколько других ответов указали, что вы можете создать экземпляр AnyWrapper, выполнив его самостоятельно или путем поиска существующего класса и передачи экземпляра этого класса.

Однако мне кажется, что то, что вы делаете, вряд ли удастся. Вы пытаетесь вызвать метод, аргумент которого полностью неизвестен вам. Вам нужно прочитать документацию об этом методе и узнать, для чего нужен AnyWrapper и как он будет использоваться. Может быть, просто нужно что-то сделать, но, возможно, AnyWrapper несет определенную ответственность за потребности EClientSocket.

Этот вид программирования путем проб и ошибок может привести к серьезным проблемам в будущем. Во-первых, некоторые методы небезопасны для вызова, если не будут приняты другие меры предосторожности. Некоторые методы имеют серьезные последствия для производительности или безопасности. В этом случае я думаю, вам действительно нужно выяснить, что именно вы пытаетесь сделать, прежде чем вы выясните, как это сделать.

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