有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

无法从Android Studio中的非静态方法调用java非静态方法

当然,我知道需要从非静态上下文调用非静态方法

当我这么想的时候,我是不是错过了什么

public void methodName(int i) { ... }

是非静态的吗

因为AndroidStudio 2.3.2将其伪装为静态上下文,所以我无法从该方法调用以下语句

enter image description here

方法:

public void deleteCard(int id){
    for(int i = 0; i < cards.size(); i++){
        if(cards.get(i).id == id){
            cards.remove(i);
            notifyItemRemoved(i);
            notifyItemRangeChanged(i, cards.size());
        }
    }
}

共 (1) 个答案

  1. # 1 楼答案

    编译期间的错误消息和应用程序生命周期内发生异常期间的堆栈跟踪消息提供了足够的问题线索

    在您的例子中,它明确表示“非静态方法deleteCard(int)不能从静态上下文引用”。在这里,您可以正确地看到deleteCard是非静态的,并且从消息的第一部分“非静态方法deleteCard(int)..”可以明显看出这一点,但是您错过了消息的第二部分,该部分讲述了该问题,即“…无法从静态上下文中引用”

    在这种情况下,您应该了解如何引用字段或方法。您正在使用类名来调用该方法。它是一个静态上下文

    所有成员实例字段和方法都需要其类的实例,然后只有使用对该对象的引用才能访问它们。非静态成员字段和方法属于对象。访问对象的非静态字段并调用对象上的非静态方法,为此需要相应类的引用

    您需要类CardAdapter的对象来调用任何实例成员方法,因为该方法是非静态的