条件参数的紧凑 Java 语法?

Pet*_*ete 3 java syntax

处理这种情况的最佳(最紧凑)方法是什么:方法调用的一个或多个参数取决于某些条件,而其余参数是相同的?

例如——你想

DeathRay mynewWpn = new DeathRay(particle.proton, chassisColor.BLACK, oem.ACME)
Run Code Online (Sandbox Code Playgroud)

如果

enemy_composition == nature.ANTIMATTER
Run Code Online (Sandbox Code Playgroud)

DeathRay mynewWpn = new DeathRay(particle.anti-proton, chassisColor.BLACK, oem.ACME)
Run Code Online (Sandbox Code Playgroud)

如果

enemy_composition == nature.MATTER
Run Code Online (Sandbox Code Playgroud)

显然你可以,if-else但是当有很多参数或多个条件参数时,它看起来不必要地长。我也这样做了,if-else预先创建了一个参数,然后调用了该方法。同样,这似乎有点笨拙。是否有某种类似于 Excel if 语句的内联语法?

eri*_*son 5

你可以做

new DeathRay(enemy_composition == nature.ANTIMATTER ? particle.proton : particle.anti-proton, chassisColor.BLACK, oem.ACME)
Run Code Online (Sandbox Code Playgroud)

……但我想我们都同意这很可怕。它还假设只有两种粒子。

这里有一些更好的选择。

switch

particle type;
switch (enemy_composition) { /* Assuming "nature" is an enum. */
  case ANTIMATTER : 
    type = particle.proton;
    break;
  case MATTER : 
    type = particle.antiproton;
    break;
}
DeathRay mynewWpn = new DeathRay(type, chassisColor.BLACK, oem.ACME);
Run Code Online (Sandbox Code Playgroud)

enum 方法:

向您的enum, 中添加一个方法Nature

public enum Nature
{

  MATTER
  {
    public Particle getCounterWeapon()
    {
      return Particle.ANTIPROTON;
    }
  },
  ANTIMATTER
  {
    public Particle getCounterWeapon()
    {
      return Particle.PROTON;
    }
  };

  public abstract Particle getCounterWeapon();

}
Run Code Online (Sandbox Code Playgroud)

然后使用它。

DeathRay mynewWpn = new DeathRay(enemy_composition.getCounterWeapon(), chassisColor.BLACK, oem.ACME);
Run Code Online (Sandbox Code Playgroud)

Map

particle type = counterWeapons.get(enemy_composition);
DeathRay mynewWpn = new DeathRay(type, chassisColor.BLACK, oem.ACME);
Run Code Online (Sandbox Code Playgroud)