2009-04-27 5 views
0

J'essaie d'utiliser l'API Java Interactive Brokers pour voir si je peux faire un trading algorithmique (sur le papier initialement). Je veux appeler une méthode appelée ReqMktDepth() qui est dans une classe appelée EClientSocket.Comment instancier une classe qui a un constructeur nécessitant un objet d'interface

Le constructeur EClientSocket nécessite la transmission d'un objet de type AnyWrapper et AnyWrapper est une interface qui n'est pas une classe concrète. En théorie, comment puis-je passer une classe AnyWrapper au constructeur EClientSocket.

Répondre

6

Vous devez créer une classe qui implémente AnyWrapper (en utilisant le mot clé "implements") et vous devez ensuite fournir les définitions de toutes les méthodes définies par cette interface.

est ici un tutoriel simple:

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

+0

J'utilise d'autres API d'entreprises et je ne comprends pas vraiment ce que les méthodes font, mon implémentation peut-elle être vide? – Ankur

+0

Cela dépend du spécifique. Il existe peut-être une classe concrète qui implémente AnyWrapper dans l'API tierce. Essentiellement, il ne peut pas être vide sauf si AnyWrapper est vide; c'est-à-dire que vous devez définir chaque méthode définie par une interface que vous souhaitez implémenter. – BobbyShaftoe

4

Vous pouvez créer votre propre classe qui implémente l'interface AnyWrapper comme le suggère Bobby. ou Utiliser n'importe quelle autre classe (présente dans la bibliothèque/jar/namespace) qui s'étend déjà à partir de l'interface AnyWrapper comme l'EWrapper, classe qui a déjà une implémentation de AnyWrapper.

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

+0

:) Ouais, je n'y ai pas pensé. – BobbyShaftoe

+0

Merci, j'ai essayé de trouver cela pendant des siècles. – Ankur

2

Vous devriez probablement utiliser une classe dans cette API que vous utilisez qui implémente l'interface AnyWrapper. Vous pouvez jeter un oeil dans le JavaDoc de cette API ou utiliser les fonctionnalités de votre IDE (quelque chose comme afficher la hiérarchie de type) pour savoir quelles classes implémentent AnyWrapper, et en passer une.

2

Plusieurs autres réponses ont souligné que vous pouvez créer une instance de AnyWrapper en l'implémentant vous-même ou en trouvant une classe existante et en passant une instance de cette classe.

Cependant, il me semble que ce que vous faites n'a pas de chance de réussir. Vous essayez d'appeler une méthode dont l'argument vous est complètement inconnu. Vous devez lire la documentation sur cette méthode et savoir à quoi sert AnyWrapper et comment il sera utilisé. Peut-être que quelque chose doit être fourni, mais AnyWrapper a peut-être une responsabilité dont EClientSocket a besoin.

Ce type de programmation par essais et erreurs peut entraîner de graves problèmes à l'avenir. D'une part, certaines méthodes ne sont pas sûres d'appeler à moins que d'autres mesures de protection ne soient prises. Certaines méthodes ont des implications majeures en termes de performances ou de sécurité. Dans ce cas, je pense que vous avez vraiment besoin de savoir ce que vous essayez de faire avant de comprendre comment le faire.

Questions connexes