RecyclerView: внутренние классы не могут иметь статических декларации
Я немного смущен, у меня есть настройка recyclerview в соответствии с учебником на сайте google/android, и я получаю следующую ошибку
Inner classes cannot have static declaration
конечно, у меня есть вложенный статический класс, но так его определил android/google.
public class ItemsViewAdapter extends RecyclerView.Adapter<ItemsViewAdapter.ViewHolder> {
...
...
public static class ViewHolder extends RecyclerView.ViewHolder {
...
}
почему я получаю эту ошибку, я слышу, что лучше использовать вложенный класс как статический, поэтому вы не тратите ссылку, но текущая версия Android studio жалуется
любые идеи ?
спасибо
2 ответов
прямо на ваши вопросы:
-
внутренние классы не могут иметь статических декларации
это совершенно верно. Это не ошибка, и сообщение об ошибке даже не вводит в заблуждение.
-
Я слышу, что лучше использовать вложенный класс как статический, поэтому вы не тратите ссылку
вы абсолютно правы.
-
раствор для ты:
создайте новый класс (файл) в своем проекте для
ItemsViewAdapter
и такой ошибки не будет.
Общие Обсуждения
Java и Android оба поддерживают, что вы можете объявить static
внутренние классы/члены/функции но этот класс должен быть родительским классом. Вы не можете сделать это внутри внутреннего класса.
И. Е., class Main
может быть static class Adapter
но если Adapter
класс внутренняя класс Main
не статический, то он не может иметь свой собственный статический внутренний класс/член.
Что Вы Можете Иметь?
class Main
static class Adapter
static class Holder
или
class Adapter
static class Holder
если вы хотите объявить любого члена класса как static
тогда непосредственный родительский класс должен быть основным классом верхнего уровня в этом файле.
почему?
дальнейшее чтение по теме
1 http://www.geeksforgeeks.org/inner-class-java/
2 http://www.javaworld.com/article/2077372/learn-java/static-class-declarations.html
вы также можете просто реализовать ItemViewAdapter как статический класс
public static class ItemsViewAdapter extends RecyclerView.Adapter<ItemsViewAdapter.ViewHolder> {
...
...
public static class ViewHolder extends RecyclerView.ViewHolder {
...
}
Это должно позаботиться об ошибке