¿Hay alguna forma de evitar el if-else y el casting dinámico en este caso?

Parece que su implementación tiene mucho en común con el patrón de visitante, algo como esto:

public interface ISkillable //this is your Skill
{
    public int GetPower();
    public string GetSpeak();
}

public interface IVisitable //player or npc
{
    public void Accept(IVisitor visitor)
}

public interface IVisitor //AttackHandler or SpeakHandler
{
    public void ApplySkill(ISkillable skillable)
}

public class Player implements ISkillable, IVisitable
{
    ...
    public void Accept(IVisitor visitor)
    { 
        visitor.Visit(this); 
    }
}

public class AttackVisitor implements IVisitor
{
    public void Visit(ISkillable skillable)
    {
        //do something with power
    }
}

y luego un ejemplo de cómo se puede usar es

player.Accept(new AttackVisitor(/*you can provide additional info like enemy*/));
player.Accept(new SpeakVisitor());
Respuesta 1

Spring Boot puede construir archivos ejecutables .jar o .war. ¿Hay alguna diferencia entre ellos, además de la extensión del archivo? La documentación indica que debe configurar su proyecto para construir un jar o ...

¿Existe una manera elegante de afirmar que los números son iguales mientras se ignoran sus clases? Quiero usarlo en el marco de pruebas JUnit pero, por ejemplo, Assert.assertEquals (1,1L) falla con java.lang ...

Tengo algunas pérdidas de memoria en mi aplicación. Todos se originan en torno a un clúster de vista específico en el que he pasado mucho tiempo retocando y tratando de reducir un paso contextual lo más posible. Esto lleva ...

Estoy usando Selenium WebDriver (ChromeDriver). Necesito eliminar algunos elementos de la página después del procesamiento (del modelo DOM). Por ejemplo, tengo un elemento siguiente: WebElement starRatingElement = ...