java - 我没有实现的外部库

标签 java interface

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

package com.company.name.library;

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

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

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

最佳答案

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

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

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

package com.company.name.yourpackage

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

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

   // state
   FooService anImplementationIWasGiven;
}

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

如果用法不清楚,那么您应该向提供该库的人投诉,但没有足够的文档。如果由于某种原因这是不可能的,您也可以考虑自己添加,这样其他人就不必受苦。

关于java - 我没有实现的外部库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53463613/

相关文章:

java - 解决maven项目中的多个SLF4J绑定(bind)

javascript - 有什么办法可以解决 Typescript 在某些范围内卡住对象而不是其他范围内的倾向吗?

c# - 静态方法作为契约(Contract)的一部分

java - 关于 Java 动态转换的大学任务

c# - 在 List<MyType> 和 List<IMyType> 之间进行转换

java - 在一个简单易懂的解释中,Java 中的 Runnable 是什么?

java - 如何在我的类中正确实例化 log4j Logger 对象?

java - maven eclipse 工作区解析

java - 如何获取二维数组的众数

Java 泛型绑定(bind)类型和类型参数