如何定义将对象作为参数并将其返回到另一个对象的方法?

时间:2018-10-19 13:23:28

标签: java

我必须上课,一个是智能卡,另一个是CardLock。 SmartCard类创建一个新对象,其名称和人员状态可以为true或false。

现在,CardLock类应该具有一种方法,我可以在其中刷卡,并从最后刷过的卡中获取信息。

我的代码如下:

public class CardLock{
SmartCard lastCard;


public SmartCard swipeCard(SmartCard newCard){
    lastCard = newCard;
}

public SmartCard getLastCardSeen(){
    return lastCard;
}

public static void main(String[] args){
    System.out.println("Swiping card");
    SmartCard cardA = new SmartCard("Anna Undergrad", false);
    swipeCard(cardA);
    System.out.println(cardA.getOwner() + " card swiped.");
    SmartCard cardB = new SmartCard("Dr. John Turpentine", true);


    System.out.println("The last card swiped was by " + cardA.getLastCardSeen().getOwner());

}

现在,我收到一个错误“无法从静态上下文中引用非静态方法SwipeCard(SmartCard)”,这使我很难理解。

另一个错误是在cardA.getLastCardSeen()。getOwner()处出现的,即使它在SmartCard中并且是公共的,也无法找到getOwner方法。

感谢thelp。

3 个答案:

答案 0 :(得分:0)

swipeCard对象定义了CardLock方法。您需要在其上调用该方法的CardLock对象。

答案 1 :(得分:0)

我没有完全了解您要实现的目标,但是得到“无法从静态上下文引用非静态方法SwipeCard(SmartCard)”错误的原因是主方法是静态的,而您的swipeCard( )方法不是。将其设置为静态,错误将消失。您只能从静态方法中引用静态方法。  cardA对象也是SmartCard类型。因为您还没有发布该类,所以我不能确定,但​​是我认为SmartCard类没有该方法。您能否更具体地说明您要执行的操作并发布SmartCard类的代码。我在下面编辑了您的代码,看看是否有帮助。

public class CardLock {
    SmartCard lastCard;


    public static void swipeCard(SmartCard newCard) {
        lastCard = newCard;
    }

    public static SmartCard getLastCardSeen() {
        return lastCard;
    }

    public static void main(String[] args) {
        System.out.println("Swiping card");
        SmartCard cardA = new SmartCard("Anna Undergrad", false);
        swipeCard(cardA);
        System.out.println(cardA.getOwner() + " card swiped.");
        SmartCard cardB = new SmartCard("Dr. John Turpentine", true);


        System.out.println("The last card swiped was by " + getLastCardSeen().getOwner());

    }
}

答案 2 :(得分:0)

首先,您的功能 SmartCard swipeCard(SmartCard newCard)定义不明确。 您应该像这样定义它:

public void swipeCard(SmartCard newCard)

如果您希望它在编写时执行。

接下来,您不能像这样调用 swipeCard(cardA); ,因为它不是静态方法。如果要这样做,则必须将关键字 static 添加到函数中,例如:

public static void swipeCard(SmartCard newCard)

您可以在Static methods vs instance methods java

上了解有关静态方法的更多信息。

最后,向我们展示您的 SmartCard 类会有所帮助。