Как можно создать абстрактный enum? - PullRequest
0 голосов
/ 28 декабря 2018

мои проблемы в следующем, у меня есть компонент в Java, который получает Enum, но мне нужно использовать этот компонент с несколькими ENUM, с которыми связаны эти enum.

Затем у меня есть два следующих ENUM

public enum Train{
    A, B, C
}

public enum Bus{
    L,U,V
}

Компонент получает ENUM, но я хочу установить оба поезда или шины, в зависимости от предварительного условия

Если я выберу шину, установленную для компонента Bus Enum, если выберу Tran set Train enum

I трей с интерфейсом следующего режима:

public interface Transport(){}

public enum Bus implements Transport
publi enum Train implements Transport

Но не работает, потому что компонент вызывает методы Enum, и может устанавливать только методы enum

Я не могу пройтиПеречислим как универсальный, потому что мне нужен некоторый контроль над параметром, который я установил в компоненте.

Есть идеи?

Ответы [ 2 ]

0 голосов
/ 28 декабря 2018

Вот как вы можете добиться того, чего хотите, используя параметр общего типа T, который расширяет как Enum, так и реализует Transport:

interface Transport {}

enum Bus implements Transport {
    A, B, C
}

enum Train implements Transport {
    L, U, V
}

public class Test<T extends Enum & Transport> {
    private T transport;

    Test(T transport) {
        this.transport = transport;

        // Can still use enum methods
        System.out.println(this.transport.name());
        System.out.println(this.transport.ordinal());
    }

    public static void main(String[] args) {
        new Test(Train.L); // prints out "L", "0"
    }
}
0 голосов
/ 28 декабря 2018

Вы не можете сделать это так, проверьте по jls-8.9 , ниже вы найдете сообщение

Типы перечислений (§8.9) не должны объявляться абстрактными;это приведет к ошибке во время компиляции.

Тип перечисления неявно является окончательным, если он не содержит хотя бы одну константу перечисления, имеющую тело класса.

Это ошибка времени компиляцииявно объявить тип перечисления как final.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...