Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.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_Android - Fatal编程技术网

Java 静态接口法

Java 静态接口法,java,android,Java,Android,我有这样的设计模式: interface IDriver { String getName(); } class DriverX implements IDriver { @Override public String getName() { return "X"; } } class DriverY implements IDriver { @Override public String getName() { return "Y"; } } class D

我有这样的设计模式:

interface IDriver {
   String getName();
}

class DriverX implements IDriver {
   @Override
   public String getName() { return "X"; }
}

class DriverY implements IDriver {
   @Override
   public String getName() { return "Y"; }
}

class DriverFactory {
   public IDriver getDriverByName(String name) {
       if (name.equals("X")) {
          return new DriverX();
       }
       if (name.equals("Y")) {
          return new DriverY();
       }
   }
}
我现在想要的是,列出一个驱动程序名列表,而不必对它们进行实例化。Java8允许我使用
静态
接口方法,但Java7不允许。我不能使用Java 8,因为我的Android目标低于API 24


有没有一种方法不必实例化驱动程序就可以做到这一点?

您可以在类中放置静态final字段。然后你会有
if(name.equals(DriverX.name))…
@khelwood这是惯例还是在接口中?你的方法都缺少返回类型。即使在Java 8中,接口上的静态方法也不是接口关于实现类的规范的一部分;这只是一个属于接口的静态方法。您可能想考虑使用枚举而不是孤立子类。至少对于这个过于简单的例子来说,这是有道理的。随着类复杂性的增加,它变得越来越不实用。