按接口导入地图密钥

时间:2014-05-07 12:45:55

标签: java class oop map interface

假设我有一个带有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()行?

2 个答案:

答案 0 :(得分:1)

如今,你在 java 8 中有设施在界面中拥有默认方法

有了这个,你可以这样做:

public interface KeysForDataSpecific23 {
 default void setKeys(){
   identifiers.put("key", By.cssSelector("something"));
 }
}

默认方法可以为接口提供初始行为。

答案 1 :(得分:0)

你不能,使用接口。

你可以这样做:

public abstract class KeysForDataSpecific23 extends Data {
    protected KeysForDataSpecific23() {
        identifiers.put("key", By.cssSelector("something"));
    }
}

public class DataSpecific2 extends KeysForDataSpecific23 {
}


public class DataSpecific3 extends KeysForDataSpecific23 {
}