我没有实现的外部库

时间:2018-11-25 00:22:48

标签: java interface

我需要编写一段代码来检查从方法调用返回的字符串。问题是,除了如下所示的接口之外,我没有关于此方法的任何信息或实现:

package com.company.name.library;

public interface FooService {
    String getBar(String fooBar) throws NotKnownBarException, NotKnownFooException;
}

在一个完全独立的程序包中,我想编写一些使用此方法的代码。 (本质上,我需要此代码进行编译,而不必运行)

由于我没有实现,所以无法实例化在其上调用方法调用的对象。甚至有可能利用如此有限的信息进行编译?还是需要做一些事情,使我可以编译代码,并在运行时执行某种注入,以便在有可用的实现时可以进行正确的方法调用。

1 个答案:

答案 0 :(得分:1)

使用此功能所需要做的就是接口定义。在某些时候,您的代码段的客户端必须传入一个实现该接口的对象,然后您就可以使用它。

从去耦的角度来看,不必依赖特定的实现通常是一件好事。当然,您确实需要一个代码来运行代码并进行单元测试。为此,您可能需要创建自己的模拟实现。

如下所示的伪Java代码(免责声明:Java不是我的主要语言)

package com.company.name.yourpackage

class UsesFoo {
   // constructor
   UsesFoo(FooService giveMeAnImplementationPlease)
   {
   }

   String DoSomethingWithFoo()
   {
       return anImplementationIWasGiven.getBar()   
   }

   // state
   FooService anImplementationIWasGiven;
}

根据库的用途,可能会创建自己的实现。在这种情况下,您可以将示例转过来,并假设该库具有类似 UsesFoo 的类,需要您提供实现。

如果用法不清楚,那么您应该向没有提供足够文档的任何人投诉。如果由于某种原因无法做到这一点,您也可以考虑自己添加它,这样其他人就不必痛苦。