[Info-vax] OpenVMS system programming language

Arne Vajhøj arne at vajhoej.dk
Mon Feb 24 22:42:56 EST 2025


On 2/24/2025 9:22 PM, Lawrence D'Oliveiro wrote:
> And then there’s the long-windedness of code like
> 
>      static final java.util.Map<Integer, String> TypeNames;
>        /* mapping from sensor type codes to symbolic names */
>      static
>        {
>          TypeNames = new java.util.HashMap<Integer, String>();
>          TypeNames.put(Sensor.TYPE_ACCELEROMETER, "accelerometer");
>          TypeNames.put(Sensor.TYPE_AMBIENT_TEMPERATURE, "ambient temperature");
>          TypeNames.put(Sensor.TYPE_GRAVITY, "gravity");
>          TypeNames.put(Sensor.TYPE_GYROSCOPE, "gyroscope");
>          TypeNames.put(Sensor.TYPE_LIGHT, "light");
>          TypeNames.put(Sensor.TYPE_LINEAR_ACCELERATION, "linear accel");
>          TypeNames.put(Sensor.TYPE_MAGNETIC_FIELD, "magnetic");
>          TypeNames.put(Sensor.TYPE_ORIENTATION, "orientation");
>          TypeNames.put(Sensor.TYPE_PRESSURE, "pressure");
>          TypeNames.put(Sensor.TYPE_PROXIMITY, "proximity");
>          TypeNames.put(Sensor.TYPE_RELATIVE_HUMIDITY, "relative humidity");
>          TypeNames.put(Sensor.TYPE_ROTATION_VECTOR, "rotation");
>          TypeNames.put(Sensor.TYPE_TEMPERATURE, "temperature");
>        } /*static*/
> 
> because the language doesn’t provide expressions that evaluate to
> common structure types like dictionaries/maps.

If you are on Java 10+ then you could:

Map<Integer, String> typeNames = Map.of(Sensor.TYPE_ACCELEROMETER, 
"accelerometer",
  
Sensor.TYPE_AMBIENT_TEMPERATURE, "ambient temperature",
                                         ...);

But the Sensor.TYPE_* int approach has been obsolete since Java 5 where
Java got enums.

With enum the need for that Map disappears.

You can either hack it:

public class EnumHack {
     public static enum SensorType {
         TYPE_ACCELEROMETER, TYPE_AMBIENT_TEMPERATURE, TYPE_GRAVITY;
         public String prettyName() {
             return name().substring(5).toLowerCase().replace('_', ' ');
         }
     }
     public static void main(String[] args) {
  
System.out.println(SensorType.TYPE_AMBIENT_TEMPERATURE.prettyName());
     }
}

or do it the right way:

public class EnumRight {
     public static enum SensorType {
         TYPE_ACCELEROMETER("accelerometer"), 
TYPE_AMBIENT_TEMPERATURE("ambient temperature"), TYPE_GRAVITY("gravity");
         private String prettyName;
         private SensorType(String prettyName) {
             this.prettyName = prettyName;
         }
         public String getPrettyName() {
             return prettyName;
         }
     }
     public static void main(String[] args) {
  
System.out.println(SensorType.TYPE_AMBIENT_TEMPERATURE.getPrettyName());
     }
}

Arne




More information about the Info-vax mailing list