小编M. *_*glu的帖子

在 Android 发布版本中使用默认方法会引发 AbstractMethorError

我有一个从 Android 继承的接口,TextWatcher仅用于实现afterTextChanged方法。我在我的项目中启用了 Java 8 支持,并在build.gradle文件中添加了源和目标兼容性选项,但即使它在调试版本中运行完美,它在我测试的每台设备上的发布版本中都失败了。我首先在 Play Console 的预发布报告中注意到了它,并在 Firebase 的测试实验室中再次进行了测试,但仍然是每次设备抛出AbstractMethodError后都会崩溃。

这是我的AfterTextChangedListener

import android.text.Editable;
import android.text.TextWatcher;

public interface AfterTextChangedListener extends TextWatcher {
    @Override
    default void beforeTextChanged(CharSequence s, int start, int count, int after) {
        // Do nothing
    }

    @Override
    default void onTextChanged(CharSequence s, int start, int before, int count) {
        // Do nothing
    }

    @Override
    void afterTextChanged(Editable s);
}
Run Code Online (Sandbox Code Playgroud)

这是使用此接口的代码部分:

mSomeEditText.addTextChangedListener((AfterTextChangedListener) editable -> {
    // Logic using 'editable'.
});
Run Code Online (Sandbox Code Playgroud)

这是崩溃的 …

java android textwatcher java-8 default-method

6
推荐指数
1
解决办法
307
查看次数

有没有一种方法可以将所有指向已释放内存的指针设置为NULL?

我想将所有指向释放内存位置的指针设置为NULL,这样就不可能有悬空指针或双精度释放。这在C中可能吗?

例如,我具有以下结构:

struct B {
    int *arr;
    unsigned int len;
};

struct A {
    struct B *b;
};

// Freeing and setting them to NULL:
bool test_safe_free() {
    struct A *a = malloc(sizeof(struct A));
    struct B *b = malloc(sizeof(struct B));
    b->arr = malloc(100 * sizeof(int));
    b->len = 100;
    a->b = b;

    safe_free_A(&a);
    return a == NULL && b == NULL;
}

void safe_free_B(struct B **b_ref) {
    if (*b_ref != NULL) free((*b_ref)->arr);
    (*b_ref)->arr = NULL;
    free(*b_ref);
    *b_ref = NULL;
}

void …
Run Code Online (Sandbox Code Playgroud)

c pointers memory-management dynamic-memory-allocation

4
推荐指数
1
解决办法
73
查看次数