当前位置: 首页 > 知识库问答 >
问题:

如何将静态字段添加到一个构造函数值?

高山
2023-03-14

我想排序卡,但不知道如何使用构造函数将不同的卡类型与实际变量int类型连接起来。

"将卡的类型设置为类卡中的final static字段,以便可以通过例如卡来调用它们。EFFECT_MONSTER"

不允许枚举。

public class Card{
    public String name;
    public int releaseDate;
    public int type;

    final static int EFFECT_MONSTER = 1;
    final static int NORMAL_MONSTER = 2;
    final static int SPELL = 3;
    final static int TRAP = 4;

    public Card(String name,int type, int releaseDate){
        this.name = name;
        this.type = type;
        this.releaseDate = releaseDate;
    }
}

共有2个答案

阚砚文
2023-03-14

我不知道你说的“用int类型连接四个不同的静态字段”是什么意思,希望这就是你要问的。

class Card {
   public String name;
    public int releaseDate;
    public int type;

    final static int EFFECT_MONSTER = 1;
    final static int NORMAL_MONSTER = 2;
    final static int SPELL = 3;
    final static int TRAP = 4;

    public Card(String name,int type, int releaseDate){
        this.name = name;
        this.type = type;
        this.releaseDate = releaseDate;

        // Accessing the static variables, this is how you can access the static variable inside constructor. I've demoed a simple logic , don't know what you are trying to achieve
        this.releaseDate = Card.NORMAL_MONSTER;
    }

    public String getName(){
        return this.name;
    }

    public int getReleaseDate(){
        return this.releaseDate;
    }


}
邵刚洁
2023-03-14

除非我误解了您的代码,否则您要做的事情最好通过使用枚举数据类型来实现。枚举允许您定义一些预定义的常量,然后可以将这些常量用作数据类型。

因此,您应该为卡类型定义枚举:

public enum CardType {
    EFFECT_MONSTER,
    NORMAL_MONSTER,
    SPELL,
    TRAP;
}

然后在卡类中使用枚举作为类型:

public class Card {
    public String name;
    public int releaseDate;
    public CardType type;


    public Card(String name, CardType type, int releaseDate){
        this.name = name;
        this.type = type;
        this.releaseDate = releaseDate;
    }

}

创建一张卡片的工作原理就像

 new Card("SpellCard", CardType.SPELL, 0);

对于非枚举解决方案:

无法以某种方式将单个int“自动连接”到4个静态变量,如果不允许使用enum,那么执行更复杂的解决方案(如使用集合和/或java反射)可能是不可能的。因此,在这种情况下,您唯一的方法是真正手动执行所有操作。

例如,在构造函数中,可以执行以下操作:

public Card(String name,int type, int releaseDate){
    this.name = name;
    this.releaseDate = releaseDate;
    
    boolean isTypeEffectMonster = (Card.EFFECT_MONSTER == type);
    boolean isTypeNormalMonster = (Card.NORMAL_MONSTER == type);
    boolean isTypeSpell = (Card.SPELL == type);
    boolean isTypeTrap = (Card.TRAP == type);

    if (!isTypeEffectMonster && !isTypeNormalMonster && !isTypeSpell && !isTypeTrap) {
        // invalid type passed into constructor
        throw new IllegalArgumentException("Illegal Type: " + type);
    } else {
        this.type = type;
    } 
    
}
 类似资料:
  • 我想排序卡,但不知道如何使用构造函数将不同的卡类型与实际变量int类型连接起来。 “将卡的类型设置为类卡中的final static字段,以便可以通过例如Card.EFFECT_MONSTER调用它们。” 不允许使用枚举。

  • 问题内容: 表示变量只能在构造函数中分配一次。 表示它是一个类实例。 我不明白为什么禁止这样做。这些关键字在哪里互相干扰? 问题答案: 每次创建该类的实例时,都会调用一个构造函数。因此,上述代码意味着x的值将在每次创建实例时重新初始化。但是由于变量被声明为final(和static),因此您只能这样做 但是,如果删除静态,则可以执行以下操作: 或这个:

  • 本文向大家介绍C#静态构造函数?相关面试题,主要包含被问及C#静态构造函数?时的应答技巧和注意事项,需要的朋友参考一下 最先被执行的构造函数,且在一个类里只允许有一个无参的静态构造函数 执行顺序:静态变量>静态构造函数>实例变量>实例构造函数  

  • 问题内容: 我在任何地方都找不到它,所以您的帮助对我非常有用:)这是该字段: FragmentCategory: 这是发送的表格: 我尝试过这样的事情: categories = fragmentCategory.objects.get(id=1), 要么: 问题答案: Django文档的整个页面都专门针对此内容,并从内容页面进行了索引。 如该页面所述,你需要执行以下操作: 要么

  • 我在Android中创建一个自定义视图,我想添加一个val字段到构造函数,但是View包含多个构造函数。 Kotlin不允许在二级构造函数中使用val字段,因此我无法执行以下操作: 如何向构造函数添加val字段,但仍然扩展父类的多个构造函数? 我尝试过将val添加到辅助构造函数,但是静态编程语言不允许在辅助构造函数上使用val。 我尝试过创建一个主构造函数(我计划显式使用的那个)并忽略其他构造函数

  • “Bericht”对象的单独类文件的一部分(荷兰语表示消息,包含一个字符串和两个日期): 在我的主方法的某个地方,我从这个类中创建新对象: 方法“printberichten”迭代数组列表并打印所有消息 getBericht getter方法: 因此,如果我创建一个新对象,我之前的所有对象都应该显示在text Area中,但我似乎只创建了我的类的一个实例。 在命令“lijst.add(this)”