Hola plantinumbazz
El ejercicio está correcto
En lugar de hacer la conversión a float, si quieres limitar el número de decimales podrías usar un redondeo (ejemplo en
www.aprenderaprogramar.com/foros/index.php?topic=991)
Sobre la duda que planteas, creo que se puede responder de la siguiente manera: hay que diferenciar el tipo de dato enumerado TipoDePiedra de una variable cuyo tipo sea el tipo enumerado como podría ser mipiedra.
El tipo enumerado existe desde que lo declaramos, y Java permite recuperar la información relacionada con un tipo enumerado sin necesidad de que exista una instancia de dicho tipo (esto es lo que hacemos en el fragmento
for(TipoDePiedra tmp: TipoDePiedra.values()){
System.out.println(tmp.toString()+ " el palet pesa " + (2.27f*(float)tmp.getPesoEspecifico() ) + " kg");
}
Esto es una particularidad de Java. Podría ocurrir que esto no se permitiera, pero en este lenguaje sí se permite.
Espero haber ayudado a aclarar la duda.
Saludos