Could ByteOrder be turned into an enum?

Rob Spoor openjdk at icemanx.nl
Tue Jul 1 16:15:21 UTC 2025


Hi all,

I've been using ByteOrder quite a bit, but something that's always 
annoyed me is that it's not an enum (because it predates them), and 
therefore cannot be easily used in switch expressions or statements. For 
instance, the closest I get is this, which still requires a default 
statement:

     var i = switch (ByteOrder.nativeOrder()) {
         case ByteOrder b when b.equals(ByteOrder.LITTLE_ENDIAN) -> 1;
         case ByteOrder b when b.equals(ByteOrder.BIG_ENDIAN)    -> 2;
         default -> throw new IllegalStateException("not supported");
     };

I know that it's also possible to use a ternary expression, but that 
depends on there never being a third value:

     var i = ByteOrder.nativeOrder().equals(ByteOrder.LITTLE_ENDIAN)
             ? 1 : 2


As a little proof-of-concept I created the enum below and checked the 
signatures with javap. Apart from a different super class (Object -> 
Enum) and the extra values() and valueOf(String) methods, the two have 
the same fields, constructors and methods with the same signatures. And 
it would allow us to use this shorter switch expression:

     var i = switch (ByteOrder.nativeOrder()) {
         case LITTLE_ENDIAN -> 1;
         case BIG_ENDIAN    -> 2;
     };

So my question is: are there technical limitations that would prevent 
this change?


The enum I created:

     public enum ByteOrder {

         BIG_ENDIAN("BIG_ENDIAN"),
         LITTLE_ENDIAN("LITTLE_ENDIAN"),
         ;

         private final String name;

          ByteOrder(String name) {
             this.name = name;
         }

         private static final ByteOrder NATIVE_ORDER
             = Unsafe.getUnsafe().isBigEndian()
                 ? ByteOrder.BIG_ENDIAN : ByteOrder.LITTLE_ENDIAN;

         public static ByteOrder nativeOrder() {
             return NATIVE_ORDER;
         }

         public String toString() {
             return name;
         }
     }



More information about the core-libs-dev mailing list