使在if语句中创建的类的副本在该语句之外可访问(Java)

使在if语句中创建的类的副本在该语句之外可访问(Java),java,Java,首先,很抱歉,如果我在制作类的副本时没有使用正确的词语,我是Java新手 System.out.println("Choose a class:\nWarrior\nRouge\nCleric\nWizard\nArcher"); String playerClass = input.nextLine(); if (playerClass.equalsIgnoreCase("Warrior")){ playerClass = "warrior";

首先,很抱歉,如果我在制作类的副本时没有使用正确的词语,我是Java新手

System.out.println("Choose a class:\nWarrior\nRouge\nCleric\nWizard\nArcher");
    String playerClass = input.nextLine();
    if (playerClass.equalsIgnoreCase("Warrior")){
        playerClass = "warrior";
        Character player = new Warrior();
    }
    if (playerClass.equalsIgnoreCase("Rouge")){
        playerClass = "rouge";
        Character player = new Rouge();
    }
    if (playerClass.equalsIgnoreCase("Cleric")){
        playerClass = "cleric";
        Character player = new Cleric();
    }
    if (playerClass.equalsIgnoreCase("Wizard")){
        playerClass = "wizard";
        Character player = new Wizard();
    }
    if (playerClass.equalsIgnoreCase("Archer")){
        playerClass = "archer";
        Character player = new Archer();
    }
上面的代码就是我的问题所在。我正在创建一个老式的文本冒险游戏,我有一个名为
角色
的类。它的子类是玩家可以选择的类(巫师、战士、胭脂等等)。我知道在if语句中声明的类(同样,不确定是否使用了正确的词)不能在if语句之外访问,但是如果我没有在if语句中声明它,那么编译器将不知道该类使用哪个子类


是否有一种方法可以使类在if语句之外访问,或者有一种方法可以在
if
语句之外声明类,然后更改if语句中的子类

只需在
if
语句外部声明变量,并在
if
语句内部分配变量即可。这与
playerClass
变量的用法相同

像这样:

String playerClass = input.nextLine();
Character player = null;

if (playerClass.equalsIgnoreCase("Warrior")){
    playerClass = "warrior";
    player = new Warrior();
}
if (playerClass.equalsIgnoreCase("Rouge")){
    playerClass = "rouge";
    player = new Rouge();
}
这是假设
战士
胭脂
,ets都是
字符

对象实例的子类 您不创建创建的对象的副本
实例
copy
的语义是为预先存在的
实例
创建一个完全独立但相同的
实例
。这在Java中也被错误地称为
clone
,因为术语
clone
具有语义

习语创作 学习使用
final
correct对于编写易于维护的确定性代码至关重要

重要的是,所有的
if/else if/else
都是排除性的,这样就不会遗漏任何边缘案例。
字符
绝对不可能为
或未使用此代码正确初始化

成语
“SomeString”.equalsIgnoreCase(变量)字符串
文本与变量进行比较的code>确保不必测试
null
,并且在比较过程中不会得到
NullPointerException
,因为
null
测试已经在方法内部

这也避免了使用
null
,这几乎是不合适的,会导致大量防御性编程和难以维护的代码。您要么创建一个有效实例,要么失败,并且您确切地知道它失败的原因

有一个名为
player
Character
实例是令人困惑的

这应该是一个工厂方法模式

PS胭脂是一种红色;rogue是一个D&D职业。
final Character character; // assuming that all the instances subclass `Character`

if ("warrior".equalsIgnoresCase(playerClass)) { character= new Warrior(); }
else if ("cleric".equalsIgnoresCase(playerClass)) { character = new Cleric(); }
else if ( /* you get the idea */ ) { character= new Whatever();}
else() { throw new RuntimeException(playerClass + " is not a valid class"); }
public Character characterFromClass(@Nonnull final String characterClass)
{
    if ("warrior".equalsIgnoreCase(characterClass)) { return new Warrior(); }
    else if ("cleric".equalsIgnoreCase(characterClass)) { return = new Cleric(); }
    else if ( /* you get the idea */ ) { return new Whatever();}
    else() { throw new RuntimeException(characterClass+ " is not a valid class"); }
}

final Character character = characterFromClass(input.nextLine());