I chiesto simile domanda stamattina, e per qualsiasi motivo, non ricevo una risposta completa alla mia domanda. Lo chiederò in un modo diverso.
Stavo cercando di capire la serie di blog di Eric Lippert Wizard and Warriors e vedi le difficoltà che possono capitare quando cerchi di usare il sistema di tipi per codificare le regole di un gioco.
 Supponiamo che abbia una classe   Weapon    e una classe   Character   . 
public abstract class Weapon 
{
    private String name;
    private int damage;
    public abstract void attack(Character character)
} 
 public abstract class Character
 {
     public final boolean tryCarry(Weapon weapon)
     {
         // code to try and add weapon to player inventory. 
     }
 }
 Nella mia domanda collegata ho chiesto di utilizzare un   enum    o un insieme di   enums    che sono attributi che descrivono un   Weapon   , quindi ad esempio, un   Sword    potrebbe avere   LongBlade    e   Destructable    come attributi e l'oggetto   Character    può interrogare tale raccolta per determinare se il   Weapon    può essere aggiunto all'inventario del giocatore, purché soddisfi determinati requisiti. 
Quindi un'implementazione potrebbe essere simile a questa:
public final boolean tryCarry(Weapon weapon)
{
   if !(weapon.containsAttribute(GameObjectAttribute.LongBlade))
   {
       // add weapon to inventory
   } 
}
Come suggeriscono le risposte, questo complica il problema.
 Il blog suggerisce l'uso di una classe   Rule   . La mia domanda collegata suggerisce un metodo   tryCarry(Weapon weapon)   . 
Forse non capisco appieno la serie di blog (e se non lo faccio, qualcuno può fornire maggiori dettagli?) ma non riesco a vederlo in nessun altro modo.
 Per come la capisco, devi comunicare con la classe   Rule    o   Player    per determinare quale percentuale diWeapon hai e se può essere aggiunto. come lo faresti? Per me comunque, un valore, se è un   string    o   enum   , deve essere memorizzato da qualche parte per indicare esattamente quale arma stai cercando di aggiungere.