函数体作为方法调用的参数

时间:2015-02-05 01:19:23

标签: java function ssl

我正在阅读一些创建连接并发送SOAP消息的程序。我遇到了一个奇怪的声明,其中包含body的完整函数在方法参数中传递。任何人都可以解释一下吗?请注意,这是一个有效的代码。

//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 :(得分: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;
   }
 });

此代码具有完全相同的功能。还有其他一些细微差别,不适用于您的示例,但如果您感兴趣,可以在链接中阅读它们。