Michael Spitsin
1 min readNov 16, 2017

--

Hello. Thanks for article. Interesting thoughs. But I want to notice:

Standard Java enums can’t support a different kind of associated values per case so this means that we can’t have something like:

MONDAY(1),
TUESDAY(2),
WEDNESDAY(3),
THURSDAY(4),
FRIDAY(5),
SATURDAY(“WEEKEND”),
SUNDAY(“WEEKEND”);

Technically, you can do that. Here is a dummy sample that shows you that possibility:

public enum Files {
FILE_METALLICA_NEM("Nothing else matters"),
FILE_FILM_COUNT(3),
FILE_COMPLEX(new ComplexFile(0, 1, 0, 0, 0, 1, 0));

public final int dataInt;
public final String dataStr;
public final ComplexFile dataComplex;

Files(int dataInt) {
this.dataInt = dataInt;
this.dataStr = null;
this.dataComplex = null;
}

Files(String dataStr) {
this.dataInt = 0;
this.dataStr = dataStr;
this.dataComplex = null;
}

Files(ComplexFile dataComplex) {
this.dataInt = 0;
this.dataStr = null;
this.dataComplex = dataComplex;
}
}
public class ComplexFile {
public final int[] someComplexData;

public ComplexFile(int... someComplexData) {
this.someComplexData = someComplexData;
}
}
//simple check test
public class Test {
@org.junit.Test
public void test() {
Assert.assertEquals(Files.FILE_METALLICA_NEM.dataStr, "Nothing else matters");
Assert.assertEquals(Files.FILE_FILM_COUNT.dataInt, 3);
Assert.assertArrayEquals(Files.FILE_COMPLEX.dataComplex.someComplexData, new int[] { 0, 1, 0, 0, 0, 1, 0 });
}
}

--

--

Michael Spitsin
Michael Spitsin

Written by Michael Spitsin

Love being creative to solve some problems with an simple and elegant ways

Responses (1)