Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 按接口导入映射键_Java_Class_Oop_Map_Interface - Fatal编程技术网

Java 按接口导入映射键

Java 按接口导入映射键,java,class,oop,map,interface,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) { ret

假设我有一个具有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);
}
}
现在我想定义一个接口,该接口只向以下两个子类添加hashmap键:

import org.openqa.selenium.By;

public interface KeysForDataSpecific23 {
   identifiers.put("key", By.cssSelector("#something"));
}
显然,这将导致编译错误,因为接口不能从数据类继承,并且变量标识符没有定义


有没有在没有冗余的情况下执行此操作的方法,例如在两个受影响的类中添加put()行?

您不能使用接口

不过,您可以这样做:

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

public class DataSpecific2 extends KeysForDataSpecific23 {
}


public class DataSpecific3 extends KeysForDataSpecific23 {
}

现在,在Java8中,您可以在接口中使用默认方法

使用此选项,您可以执行以下操作:

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

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

我使用Java8,但由于“变量无法解析”,这仍然不起作用哦,是的。。。静态方法无法访问非静态变量,因此会破坏面向对象编程。我接受了Isaac的解决方案,尽管它不是最优的(没有类的多重继承),但它是有效的。
public interface KeysForDataSpecific23 {
 default void setKeys(){
   identifiers.put("key", By.cssSelector("something"));
 }
}