假设我有一个具有hashmap数据结构的类:
import java.util.HashMap;
import java.util.Map;
import org.openqa.selenium.By;
public abstract class Data {
protected Map<String, By> identifiers = new HashMap<>();
public By getSelector(String key) {
return identifiers.get(key);
}
}
继承它的3个子类:
public class DataSpecific1 extends Data {
}
public class DataSpecific2 extends Data implements KeysForDataSpecific23 {
}
public class DataSpecific3 extends Data implements KeysForDataSpecific23 {
}
现在我想定义一个接口,它只向其中两个子类添加hashmap键:
import org.openqa.selenium.By;
public interface KeysForDataSpecific23 {
identifiers.put("key", By.cssSelector("#something"));
}
显然,这将导致编译错误,因为接口不能从Data类继承,并且没有定义变量标识符。
有没有办法在没有冗余的情况下做到这一点,比如在两个受影响的类中添加put()行?
现在,java 8可以在接口中使用默认方法,
你可以这样做:
public interface KeysForDataSpecific23 {
default void setKeys(){
identifiers.put("key", By.cssSelector("something"));
}
}
默认方法可以为接口提供初始行为。
你不能使用接口。
你可以这样做:
public abstract class KeysForDataSpecific23 extends Data {
protected KeysForDataSpecific23() {
identifiers.put("key", By.cssSelector("something"));
}
}
public class DataSpecific2 extends KeysForDataSpecific23 {
}
public class DataSpecific3 extends KeysForDataSpecific23 {
}