Тело функции как аргументы вызова метода

1

Я читал некоторые программы, которые создают соединение и отправляют SOAP-сообщение. Я столкнулся с странным утверждением, в котором полная функция, включающая тело, передается в параметре метода. Может ли кто-нибудь объяснить это? Обратите внимание, что это рабочий код.

//Open up connection 
httpsConnection = (HttpsURLConnection) new URL(url).openConnection();

httpsConnection.setHostnameVerifier(new HostnameVerifier() {
  @Override
  public boolean verify(String hostname, SSLSession session) {
   return true;
   }
 });
  • 1
    Это анонимный внутренний класс.
  • 0
    Спасибо chrylis, означает ли это, что Object TRUE передается в качестве параметра?
Показать ещё 1 комментарий
Теги:
function
ssl

1 ответ

2
Лучший ответ

Это класс Анонимный Внутренний. Вы можете прочитать об этом подробнее здесь: 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;
   }
 });

Этот код будет иметь точно такую же функциональность. Есть и другие незначительные нюансы, которые не относятся к вашему примеру, но вы можете прочитать о них в ссылке, если вам интересно.

  • 1
    Спасибо Даниэль!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню