我需要编写一段代码来检查从方法调用返回的字符串。问题是,除了如下所示的接口之外,我没有关于此方法的任何信息或实现:
package com.company.name.library;
public interface FooService {
String getBar(String fooBar) throws NotKnownBarException, NotKnownFooException;
}
在一个完全独立的程序包中,我想编写一些使用此方法的代码。 (本质上,我需要此代码进行编译,而不必运行)
由于我没有实现,所以无法实例化在其上调用方法调用的对象。甚至有可能利用如此有限的信息进行编译?还是需要做一些事情,使我可以编译代码,并在运行时执行某种注入,以便在有可用的实现时可以进行正确的方法调用。
答案 0 :(得分:1)
使用此功能所需要做的就是接口定义。在某些时候,您的代码段的客户端必须传入一个实现该接口的对象,然后您就可以使用它。
从去耦的角度来看,不必依赖特定的实现通常是一件好事。当然,您确实需要一个代码来运行代码并进行单元测试。为此,您可能需要创建自己的模拟实现。
如下所示的伪Java代码(免责声明:Java不是我的主要语言)
package com.company.name.yourpackage
class UsesFoo {
// constructor
UsesFoo(FooService giveMeAnImplementationPlease)
{
}
String DoSomethingWithFoo()
{
return anImplementationIWasGiven.getBar()
}
// state
FooService anImplementationIWasGiven;
}
根据库的用途,可能会创建自己的实现。在这种情况下,您可以将示例转过来,并假设该库具有类似 UsesFoo 的类,需要您提供实现。
如果用法不清楚,那么您应该向没有提供足够文档的任何人投诉。如果由于某种原因无法做到这一点,您也可以考虑自己添加它,这样其他人就不必痛苦。