在我的例子中,它只是声明具体类型:
HashMap<String, String> mySerializableMap = new HashMap<>();
它允许我使用Map 方法(如put)并将映射传递给需要Serializable 的方法,而无需强制转换。当我们学会了面向接口编程时并不完美,但在我所处的情况下对我来说已经足够了。
如果你真的坚持:如前所述,单独声明一个组合接口并不能解决问题,因为我们已经拥有的具体类没有实现我们的组合接口,即使它们实现了我们组合的两个接口中的每一个。不过,我把它作为第一步。例如:
public interface SerializableMap<K, V> extends Map<K, V>, Serializable {
// No new methods or anything
}
下一步也是声明一个新类:
public class SerilizableHashMap<K, V> extends HashMap<K, V> implements SerializableMap<K, V> {
private static final long serialVersionUID = 4302237185522279700L;
}
该类被声明为实现组合接口,因此可以在需要其中一种类型的任何地方使用。它扩展了一个已经分别实现每个接口的类,因此我们不需要做更多的事情。现在我们得到了你所要求的。使用示例:
public static void main(String[] args) {
SerializableMap<String, String> myMap = new SerilizableHashMap<>();
// myMap works as a Map
myMap.put("colour1", "red");
myMap.put("colour2", "green");
// myMap works as a Serializable too
consumeSerializable(myMap);
}
public static void consumeSerializable(Serializable s) {
// So something with the Serializable
}
出于大多数目的,我认为这是矫枉过正,但现在我至少将其作为一种选择。
链接: What does it mean to “program to an interface”?