Как создать экземпляр класса, у которого есть конструктор, требующий объект интерфейса - PullRequest
0 голосов
/ 27 апреля 2009

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

Конструктор EClientSocket требует передачи объекта типа AnyWrapper, а AnyWrapper - это интерфейс, а не конкретный класс. Теоретически, как мне передать класс AnyWrapper конструктору EClientSocket.

Ответы [ 4 ]

6 голосов
/ 27 апреля 2009

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

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

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

4 голосов
/ 27 апреля 2009

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

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

2 голосов
/ 27 апреля 2009

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

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

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

2 голосов
/ 27 апреля 2009

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

...