繁体   English   中英

Java类声明(Eclipse)中的双重大括号?

[英]Double Curly Braces in Java Class Declaration (Eclipse)?

我一直在努力学习Java,我正在研究一个项目。

我有一个名为Card的抽象类,我将其用作模板来创建子类。

它有一种设置卡的名称字段和颜色字段的方法以及设置成本的方法。

我有一个名为Workshop的卡子类。

我正在尝试使用Workshop in Workshop的方法来设置Workshop的名称和颜色字段。

为此,我调用方法super.setCardNameColor("Workshop", "Green")super.setCardCost(0,0,0,0,0,0,0,0);

但是,为了做到这一点,Eclipse让我在类声明中使用(似乎是)双花括号。

我怀疑这与匿名内部课程有关,可能来自“超级”或类似的东西,但我的谷歌搜索都没有给我提供我需要的信息。 任何人都可以在这里阐述一下这个问题吗? 我正在使用sysout和getters来确保在Workshop的一个实例上正确设置了值,但是我对双括号感到困惑。 提前感谢您的帮助!

编辑:这是代码

public abstract class Card
{
    private String cardName = "";
    private String cardColor = "";
    private int coinCost = 0;
    private int woodCost = 0;
    private int brickCost = 0;
    private int stoneCost = 0;
    private int oreCost = 0;
    private int glassCost = 0;
    private int clothCost = 0;
    private int paperCost = 0;

    private int coinValue = 0;
    private int pointValue = 0;
    private int millitaryValue = 0;
    private int woodValue = 0;
    private int brickValue = 0;
    private int stoneValue = 0;
    private int oreValue = 0;
    private int glassValue = 0;
    private int clothValue = 0;
    private int paperValue = 0;

    private Card discountForCard;
    private Card discountFromCard;

    public void setCardNameColor(String cardName, String cardColor) {
        this.cardName = cardName;
        this.cardColor = cardColor;
    }

    public void setCardCost(int coinCost, int woodCost, int brickCost,
            int stoneCost, int orecost, int glassCost, int clothCost,
            int paperCost) {
        this.coinCost = coinCost;
        this.woodCost = woodCost;
        this.brickCost = brickCost;
        this.stoneCost = stoneCost;
        this.oreCost = orecost;
        this.glassCost = glassCost;
        this.clothCost = clothCost;
        this.paperCost = paperCost;
    }

    public void setCardValue(int coinValue, int millitaryValue, int pointValue,
            int woodValue, int brickValue, int stoneValue, int oreValue,
            int glassValue, int clothValue, int paperValue) {
        this.coinValue = coinValue;
        this.millitaryValue = millitaryValue;
        this.pointValue = pointValue;
        this.woodValue = woodValue;
        this.brickValue = brickValue;
        this.stoneValue = stoneValue;
        this.oreValue = oreValue;
        this.glassValue = glassValue;
        this.clothValue = clothValue;
        this.paperValue = paperValue;
    }

    public void getCardInfo() {
        System.out.println(cardName + cardColor + coinCost + woodCost+brickCost+stoneCost+oreCost+glassCost+clothCost+paperCost);
    }

    public void setGivesDiscountTo(Card card) {
        card = discountForCard;
    }

    public void setReceivesDiscountFrom(Card card) {
        card = discountFromCard;
    }

    public String getCardName() {
        return cardName;
    }
}


public class Workshop extends Card
{
    {
        super.setCardNameColor("Workshop", "Green");
        super.setCardCost(0, 0, 0, 0, 0, 1, 0, 0);
    }
}

“双花括号”中的内括号是初始化块。 (把它们想象成一个构造函数。)

<class name> {       // class declaration
    {   // initializer block
        ...
    }
}

请参阅例如什么是初始化块?

因为你不能将语句(“代码”)直接放在类声明中,如下所示:

new YourClass() { System.out.println("hello"); }

你体验到“Eclipse让你使用双花括号”,因为以下内容

new YourClass() {{ System.out.println("hello"); }}

使语句在初始化程序块中使用有效代码。


关于你的编辑:你的问题在这里:

public class Workshop extends Card {{
    super.setCardNameColor("Workshop", "Green");
    super.setCardCost(0, 0, 0, 0, 0, 1, 0, 0);
}} 

这不是很常见的编程风格。 也许你是在追求:

public class Workshop extends Card {
    public Workshop() {
        setCardNameColor("Workshop", "Green");
        setCardCost(0, 0, 0, 0, 0, 1, 0, 0);
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM