Java Новичок испытывает проблемы с пониманием некоторого "нового" синтаксиса - PullRequest
2 голосов
/ 15 февраля 2011

Я относительный новичок в Java. Я программирую на других языках и использую Java в основном, когда мне нужно использовать сторонние библиотеки, которые доступны только как Java. Таким образом, у меня есть только очень базовое понимание языка. Но обычно этого достаточно, чтобы закончить мой бизнес.

Сегодня я столкнулся с проблемой, которая настолько проста, что у меня проблемы с поиском или поиском. В следующем фрагменте кода я совсем не понимаю строку new GSRadContext:

GSRBristowCampbellStrategy algo = new GSRBristowCampbellStrategy();
RadData rd = new RadData();

... 

GSRadContext gsr = new GSRadContext( (IAGSRadStrategy) algo);
gsr.evaluate(rd);

В своем ограниченном опыте работы с Java я никогда не видел такого типа синтаксиса внутри вызова new object(). Можете ли вы объяснить мне, что происходит с битом (IAGSRadStrategy)?

Спасибо за помощь в моем образовании.

Ответы [ 3 ]

8 голосов
/ 15 февраля 2011

Этот бит:

(IAGSRadStrategy) algo

полностью отделен от конструктора. Если это поможет, вы можете думать о втором бите кода как:

IAGSRadStrategy tmp = (IAGSRadStrategy) algo;
GSRadContext gsr = new GSRadContext(tmp);
gsr.evaluate(rd);

Это просто кастинговое выражение. Не зная задействованной иерархии типов, сложно точно знать, почему она используется здесь, но обычно приведение типа в основном говорит компилятору: «Вы знаете об этом выражении только как Foo, но I знаю, что это столбец ... поэтому, пожалуйста, проверьте его для меня во время выполнения, а затем обработайте значение как столбец для результата этого выражения. "

1 голос
/ 15 февраля 2011

Этот класс GSRadContext имеет конструктор, который принимает тип объекта IAGSRadStrategy в качестве аргумента. Экземпляр algo является подтипом IAGSRadStrategy, поэтому он преобразуется в этот тип.

1 голос
/ 15 февраля 2011

algo, ссылка на GSRBristowCampbellStrategy преобразуется в IAGSRadStrategy и передается конструктору GSRadContext.

Бесплатная ссылка на Википедию:

Преобразование типа

...