【问题标题】:How to instantiate a class that has a constructor requiring an interface object如何实例化具有需要接口对象的构造函数的类
【发布时间】:2009-04-27 12:55:18
【问题描述】:

我正在尝试使用 Interactive Brokers Java API 来查看是否可以进行一些算法交易(最初是在纸上)。我想调用一个名为ReqMktDepth() 的方法,它位于一个名为EClientSocket 的类中。

EClientSocket 构造函数需要传递AnyWrapper 类型的对象,而AnyWrapper 是接口而不是具体类。从理论上讲,我该如何将 AnyWrapper 类传递给 EClientSocket 构造函数。

【问题讨论】:

    标签: java sockets interface polymorphism instantiation


    【解决方案1】:

    您需要创建一个实现 AnyWrapper 的类(使用“implements”关键字),然后您必须为该接口定义的任何方法提供定义。

    这是一个简单的教程:

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

    【讨论】:

    • 我正在使用一些其他公司的 API,并且不太了解这些方法的作用,我的实现可以是空的吗?
    • 看具体的。第三方 API 中可能已经有一个实现 AnyWrapper 的具体类。本质上,它不能为空,除非 AnyWrapper 为空;也就是说,您必须定义您希望实现的接口定义的每个方法。
    【解决方案2】:

    您可以按照 Bobby 的建议创建自己的实现 AnyWrapper 接口的类。或使用已经从 AnyWrapper 接口扩展的任何其他类(存在于库/jar/命名空间中),例如 EWrapper,该类已经具有 AnyWrapper 的实现。

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

    【讨论】:

    • :) 是的,我没想到。
    • 谢谢,我已经找了很久了。
    【解决方案3】:

    您可能应该在您使用的 API 中使用一些实现AnyWrapper 接口的类。您可以查看该 API 的 JavaDoc 或使用 IDE 的功能(例如显示类型层次结构)找出哪些类实现了AnyWrapper,并传递其中一个。

    【讨论】:

      【解决方案4】:

      其他几个答案指出,您可以通过自己实现或通过查找现有类并传入该类的实例来创建 AnyWrapper 的实例。

      但是在我看来,你正在做的事情不太可能成功。您正在尝试调用一个您完全不知道其参数的方法。您需要阅读有关该方法的文档,并了解 AnyWrapper 的用途以及如何使用它。也许只是需要提供一些东西,但也许 AnyWrapper 有一些 EClientSocket 需要的责任。

      这种反复试验的编程可能会导致一些严重的问题。一方面,除非采取其他保护措施,否则某些方法调用是不安全的。某些方法具有重大的性能或安全隐患。在这种情况下,我认为您确实需要先弄清楚您要做什么,然后再弄清楚如何做。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-11-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-06-03
        • 2017-05-25
        • 2016-04-22
        相关资源
        最近更新 更多