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

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

滕翔飞
2023-03-14

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

“将卡的类型设置为类卡中的final static字段,以便可以通过例如Card.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个静态变量,如果不允许使用枚举,那么使用集合和/或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字段,以便可以通过例如卡来调用它们。EFFECT_MONSTER" 不允许枚举。

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

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

  • 我目前在我的大学学习初级java课程,仍然在学习编程的基础知识。这周我们一直在学习构造函数,我被困在本周任务的后半部分,所以任何帮助都将不胜感激。 实验室的第二部分(我一直坚持的部分)的说明如下: 为类Truck编写完整的代码,如下面的类图所示。一定不要在构造函数中使用重复的代码。例如,具有2个参数的构造函数应该调用具有1个参数的构造函数来设置柱体的值。 这些是它想让我做的构造函数。 任何关于如何

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

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