Я читал некоторые программы, которые создают соединение и отправляют SOAP-сообщение. Я столкнулся с странным утверждением, в котором полная функция, включающая тело, передается в параметре метода. Может ли кто-нибудь объяснить это? Обратите внимание, что это рабочий код.
//Open up connection
httpsConnection = (HttpsURLConnection) new URL(url).openConnection();
httpsConnection.setHostnameVerifier(new HostnameVerifier() {
@Override
public boolean verify(String hostname, SSLSession session) {
return true;
}
});
Это класс Анонимный Внутренний. Вы можете прочитать об этом подробнее здесь: http://docs.oracle.com/javase/tutorial/java/javaOO/anonymousclasses.html
Анонимные классы позволяют сделать код более кратким. Они позволяют вам объявлять и создавать экземпляр класса одновременно. Они похожи на локальные классы, за исключением того, что у них нет имени. Используйте их, если вам нужно использовать локальный класс только один раз.
Представьте, что этот код был написан следующим образом:
httpsConnection = (HttpsURLConnection) new URL(url).openConnection();
httpsConnection.setHostnameVerifier(new MyHostnameVerifier());
// another class file
public class MyHostnameVerifier extends HostnameVerifier() {
@Override
public boolean verify(String hostname, SSLSession session) {
return true;
}
});
Этот код будет иметь точно такую же функциональность. Есть и другие незначительные нюансы, которые не относятся к вашему примеру, но вы можете прочитать о них в ссылке, если вам интересно.