首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建接口实例的目的是什么?

创建接口实例的目的是什么?
EN

Stack Overflow用户
提问于 2017-08-26 13:08:52
回答 1查看 306关注 0票数 2

我对接口的了解是:

1)接口是方法的列表,即模板

2)接口类型可以指实现该接口的类对象。

今天我遇到了下面的代码

代码语言:javascript
复制
interface Test  
{  
  void greet();  
}  
public class Demo  
{  
  public static void main(String[] args)  
  {  
    Test t = new Test()  ---> Is it correct ? WHY ?
     {  
       public void greet()  
       {  
         System.out.print("\nHi, Best wishes to way2java.com\n");  
       }  
    };  
    t.greet();  
    }  
}  

无法理解下面的代码片段的意图

代码语言:javascript
复制
Test t = new Test() 

( 1)接口是否有构造函数?据我所知,接口只有方法列表,没有定义。

2)创建接口对象合法吗?据我所知,接口类型只能引用实现该接口的类对象。

3)如果它是合法的,那么它的目的是什么?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-26 13:14:42

1)不,他们没有。

( 2)否。

您在这里创建的是,一个实现接口的匿名类--注意,您被迫实现greet方法。

在代码中有些情况下,您根本不关心为实现指定一个特定的名称--然后您可以传递匿名的内部类-- Java中lambda表达式的整个概念就是基于这个概念的。

假设您希望使用forEach方法打印列表的内容:

代码语言:javascript
复制
Arrays.asList(1, 2, 3)
  .forEach(...);

forEach接受一个Consumer实例,它是一个接口。因此,您可以创建自己的类:

代码语言:javascript
复制
class IntegerPrinter implements Consumer<Integer> {

@Override
public void accept(Integer integer) {
    System.out.println(integer);
}

但是这太简单了,无法为它创建一个新的类,因此可以传递一个匿名实例:

代码语言:javascript
复制
Arrays.asList(1, 2, 3)
  .forEach(new Consumer<Integer>() {
      @Override
      public void accept(Integer integer) {
          System.out.println(integer);
      }
  });

稍微好一点,但还是相当冗长。这就是lambda表达式可用的地方:

代码语言:javascript
复制
 Arrays.asList(1, 2, 3)
   .forEach(integer -> System.out.println(integer));
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45895729

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档