¿Cómo hacer referencia a campos enum desde dentro de Builder de otra clase?

Estoy usando un patrón Builder para crear objetos Item en mi juego, y quiero poder usar prefijos y sufijos de ítems para generar ítems aleatorios, como en Item.builder().random().build(). Prefijo y Sufijo son enumeraciones con campos desiguales. Todos ellos tienen un name, pero algunos tienen damagey luckcampos, por ejemplo. ¿Cómo accedo a los campos de las enumeraciones desde el generador?

Tengo métodos públicos en cada enumeración que devuelven un Prefijo y Sufijo aleatorios, el método de aleatorización de mi generador de artículos los llama y almacena los afijos localmente. Pero parece que no puedo llegar a sus variables miembro a través de la reflexión. prefix.getClass().getDeclaredField("name").toStringdevuelve en java.lang.String roan.ItemPrefix$2.namelugar de su nombre real. Además, me parece hacky.

Enum:

enum Prefix {
    ARROGANT {
        String name = "Arrogant ";
        int damage = 20;
        int luck = 2;
    },
    BLOODY {
        String name = "Bloody ";
        int damage = 30;
    },
    CURIOUS {
        String name = "Curious ";
        int luck = 4;
    },

    private static final int size = Prefix.values().length;

    public static Prefix randomPrefix() {
        return Prefix.values()[Dice.roll(Prefix.size)];
    }
}

Constructor:

public static abstract class Builder<T extends Builder<T>> {
    // Default values
    private String name = "itemName"; 
    private int damage = 5;
    private int luck = 0;  

    protected abstract T self();

    public T name(String name) {
        this.name = name;
        return self();
    }

    // More builder methods
    ...

    // PROBLEMATIC CODE
    public T random() {
        Prefix prefix = Prefix.randomPrefix();
        this.name = prefix.getClass().getDeclaredField("name").toString();
        return self();
        }

        public Item build() {
            return new Item(this);
        }
    }
}

// Builder helper classes
...

Idealmente, ensamblaría elementos completamente formados utilizando los campos miembros de las enumeraciones que se le pasaron. Estoy usando en enum Prefixlugar de una matriz de objetos Prefix porque quiero usar ciertos EnumSets en otro lugar para subclases de Itemlike Armor, que solo pueden usar ciertos prefijos.

Respuesta 1

Teóricamente, en general: la capa de acceso a datos contiene conexiones de base de datos y consultas. La capa empresarial contiene el modelo y la lógica. La capa de servicio contiene los principales servicios de los servicios de la aplicación. ...

Quiero crear un salto de mi reproductor que sea suave, suba, luego baje, es un desplazamiento lateral en 2D como Mario. Intenté esperar y hacer saltos lentos usando muchos pasos y no puedo entenderlo ...

Estoy trabajando en una aplicación Java que realiza numerosas consultas JDBC a una base de datos, cada una especificada en un método separado con aproximadamente el siguiente formato. public static void sampleJDBCQuery (Cadena ...

Tengo un problema con mi código. El archivo WSDL fue analizado por wsdl2java desde apache cxf. Ahora estoy tratando de conectarme con el servicio web pero sigo recibiendo una excepción de puntero nulo. Excepción en ...