2015-01-11 2 views
0

Моя Java довольно немного ржавая, и в настоящее время я изучаю Android. Я столкнулся с этой конкретной линии из книги, которую я читаю:Как это оценивается? (Crime) (getListAdapter()). GetItem (позиция)

(Crime)(getListAdapter()).getItem(position). 

Из того, что я понимаю, что это будет конвертировать возвращенный деталь (Object типа) от getItem() к Crime. Вопрос в том, почему (getListAdapter()) заключен в круглые скобки? Есть ли смысл в этом выражении? Это то же самое, что и преступление getListAdapter(). GetItem (position)? Я знал, что это не просто Java, но я растерялся, когда столкнулся с этим.

На данный момент я путаю на семантике такого рода выражения z = (x)(y).

Спасибо!

ответ

2

Он используется для того, чтобы позволить исполнению броска без запуска нового выражения. Это позволяет последующему выражению getItem(position) быть на Crime. Это эквивалентно что-то вроде

Crime c = (Crime) getListAdapter(); // <-- parenthesis not needed 
c.getItem(position); // <-- on the Crime 
1

(Crime)(getListAdapter()).getItem(position) это то же самое, как (Crime) getListAdapter().getItem(position)

Но если getItem метод определен в классе преступности и тип, возвращаемый getListAdapter() является java.lang.Object, этот код не будет компилироваться , Фактически, точка, следующая за getListAdapter(), даст доступ ко всем методам, доступным только в java.lang.Object.

Может быть, эта линия не так, и автор хотел написать: ((Crime)getListAdapter()).getItem(position)

В этом случае любой точки следующей ((Crime)getListAdapter()) даст вам доступ ко всем методам, доступным в классе преступности.

Смежные вопросы