让我描述一下情况,并且确定我只是错误地考虑了这个问题。我有一个具体的类,它将实现一个接口。我想在合同中强制该类必须具有特定类型的构造函数。因此,例如:
interface MyInterface {}
public class MyClass implements MyInterface {
public MyClass(HashMap<String, String> params) {
}
}
Run Code Online (Sandbox Code Playgroud)
我想确保使用单个HashMap参数实例化MyClass,这看起来像是要执行以下操作:
interface MyInterface<T>
Run Code Online (Sandbox Code Playgroud)
除了在方法签名上使用泛型外,我从未将它们与类或接口一起使用,而且我确实是一个初学者,因此请解释与解决方案有关的任何泛型...或如果我正在考虑的替代解决方案关于此问题(从体系结构上来讲)。谢谢!
您无法使用 Java 中的接口对构造函数强制执行契约。您可以获得的最佳近似是通过为工厂定义一个接口,并使用一个create()需要单个HashMap...的方法。
您还可以用抽象类替换接口,该抽象类的构造函数需要一个HashMap,这将强制子类给出一个,但不能给出更多(子类不一定有 HashMap 参数)。