Это совсем не странно. Переменная listAdapter
имеет тип ListAdapter
. Компилятору было все равно, какие назначения выполнялись в предыдущих строках. Если вы попытаетесь получить доступ к члену, который не известен через ListAdapter
, компилятор будет правильно жаловаться.
Более простое исправление, чем приведение, - объявить переменную как тип, который вам нужен , чтобы иметь доступ к вашим конкретным членам:
TrainingsListCursorAdapter listAdapter = new TrainingsListCursorAdapter(...);
listAdapter.currentWidth = 100;
или
TrainingsListCursorAdapter listAdapter = new TrainingsListCursorAdapter(...);
listAdapter.setOrientationWidth(100);
Итак, чтобы ответить на ваш последний вопрос - нет ничего плохого в создании экземпляра объекта и доступе к публичным членам. - это что-то не так с попыткой сделать это через переменную типа, который не знает об этих членах.
Чтобы привести более простой пример для распространенных типов, вы не можете написать:
Object text = "hello";
int length = text.length();
потому что length()
- это метод на Object
, он только на String
. Когда компилятор видит выражение text.length()
, он просматривает объявленный тип переменной text
(т.е. в данном случае Object
) и ищет метод length()
для этого типа.
Итак, вместо этого вы должны выполнить приведенный выше код:
String text = "hello";
int length = text.length();