Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.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 - Fatal编程技术网

Java 是否基于枚举类型调用特定方法?

Java 是否基于枚举类型调用特定方法?,java,Java,下面是我问题的一个抽象示例:我有一个通用类(Car),它的类型是(brand)。所有物品应仅因品牌不同而有所不同,并且基于此品牌应进行不同的处理 此类的所有对象都收集在服务类的列表中。服务应该在整个列表上执行一个例程,这基本上是相同的。两者之间只有一个函数调用应该不同 基于这种类型,我想调用不同的方法:目前我正在为枚举类型断言equals,并根据结果调用不同的方法。但这有点难看,我想知道是否有更好的解决办法 class Car { public enum Brand {

下面是我问题的一个抽象示例:我有一个通用类(
Car
),它的类型是(
brand
)。所有物品应仅因品牌不同而有所不同,并且基于此品牌应进行不同的处理

此类的所有对象都收集在服务类的列表中。服务应该在整个列表上执行一个例程,这基本上是相同的。两者之间只有一个函数调用应该不同

基于这种类型,我想调用不同的方法:目前我正在为枚举类型断言equals,并根据结果调用不同的方法。但这有点难看,我想知道是否有更好的解决办法

class Car {
    public enum Brand {
        BMW, AUDI;
    }

    private Brand brand;

    specificMeth1();
    specificMeth2();
}


class Service {

    List<Car> bmw;
    List<Car> Audi;

    processCar() {
        processList(bmw);
        processList(audi);
    }

    processList(List<Car> list) {
        for (Car car : list) {
            if (car.getBrand.equals(Brand.BMW)) {
                specificMeth1();
            } else {
                specificMeth2();
            }
        }
    }
}
等级车{
公共枚举品牌{
宝马,奥迪,;
}
自有品牌;
具体方法1();
具体方法2();
}
班级服务{
列出宝马;
列出奥迪;
processCar(){
进程列表(bmw);
工艺清单(奥迪);
}
进程列表(列表){
用于(汽车:列表){
if(car.getBrand.equals(Brand.BMW)){
具体方法1();
}否则{
具体方法2();
}
}
}
}

您应该将方法放入枚举中:

public enum Brand {
    BMW {
        @Override
        public void doSomething();
    },
    AUDI {
        @Override
        public void doSomething();
    };

    public abstract void doSomething();
}

var.getBrand().doSomething();

考虑在枚举上定义一个抽象方法,如下所示:

public enum Brand {
    BMW {
        public void specificMethod() {
            System.out.println("meth1");
        }
    },

    AUDI {
        public void specificMethod() {
            System.out.println("meth2");
        }
    };

    public abstract void specificMethod();
}
然后你可以打电话:

for (Car car : list) {
    car.getBrand().specificMethod();
}

旁注:不需要对枚举使用
equals()
car.getBrand()==Brand.BMW
工作正常。a+5到底在哪里?