`
nianien
  • 浏览: 16975 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

有关匿名接口的初始化问题

 
阅读更多
一个接口通常用来定义实例方法的声明,而方法的实现则有继承类来完成.

如果继承类在实例化时需要外界传递参数,这时候对于匿名类来说,简直是梦魇.

因为匿名类的构造方式只能是默认的构造方法,不接收任何参数.

通常的解决办法是使用final关键字声明参数,然后在内部使用.

这种方式有三个缺点
1,参数一旦被声明为final对象,就不能再改变.
2,如果参数之前没有被声明为final类型,则必须重新声明一个final参数,然后用之前的参数进行赋值.
3,这种传递方式过于丑陋,不过优雅

鉴于以上情况,在实际编码过程中,作者采用了一种比较优雅的方法来初始化匿名接口实例.

代码示例如下:
//定义一个Student接口,该接口有一个方法显示自己的名称
interface Student {
void showName();
}
public class Test {

//该方法用指定的名称创建一个Student对象实例
private static Student newStudent(String name) {
return new Student() {
private String name;

public void showName() {
System.out.println(name);
}

private Student init(String name) {
this.name = name;
return this;
}
}.init(name);
}

public static void main(String[] args) {
newStudent("LoveKitty").showName();
}
}
0
0
分享到:
评论

相关推荐

    Java提高篇之详解匿名内部类

    在这篇博客中你可以了解到匿名内部类的使用、匿名内部类要注意的事项、如何初始化匿名内部类、匿名内部类使用的形参为何要为final。  一、使用匿名内部类内部类  匿名内部类由于没有名字,所以它的创建方式有...

    《C#本质论》

    您可以让您在书籍上学习到C#语言相关的开发内容,让您在编程的时候获得更多技巧,书籍的内容很多,您可以学习匿名类型、自动实现的属性、集合接口、匿名类型和隐式类型的局部变量、集合初始化器、错误处理、扩展方法...

    《Android系统源代码情景分析》

    6.1.2 匿名共享内存设备的初始化过程 6.1.3 匿名共享内存设备文件的打开过程 6.1.4 匿名共享内存设备文件的内存映射过程 6.1.5 匿名共享内存块的锁定和解锁过程 6.1.6 匿名共享内存块的回收过程 6.2 运行...

    Java语言面向对象上册教程

    14.7 子类对象的初始化过程 83 14.8 super用法 95 14.9 方法重写 96 14.10 抽象方法/抽象类 99 14.11 final的用法 108 14.12 租赁系统 111 14.13 继承的本质 121 14.14 多态性 121 15. 内部类/匿名内部类 135 16. ...

    Android系统源代码情景分析-罗升阳-源码

    6.1.2 匿名共享内存设备的初始化过程 6.1.3 匿名共享内存设备文件的打开过程 6.1.4 匿名共享内存设备文件的内存映射过程 6.1.5 匿名共享内存块的锁定和解锁过程 6.1.6 匿名共享内存块的回收过程 6.2 运行时库...

    go开发实战.doc

    2.2.2 变量初始化 6 2.2.3 变量赋值 6 2.2.4 匿名变量 6 2.3 常量 7 2.3.1 字面常量(常量值) 7 2.3.2 常量定义 8 2.3.3 iota枚举 8 2.4 基础数据类型 10 2.4.1 分类 10 2.4.2 布尔类型 11 2.4.3 整型 11 ...

    【05-面向对象(下)】

    •接口里不能包含初始化块,但抽象类则完全可以包含初始化块。 •一个类最多只能有一个直接父类,包括抽象类;但一个类可以直接实现多个接口,通过实现多个接口可以弥补 Java单继承的不足。 面向接口编程 ...

    java面试宝典

    141、使用useBean标志初始化BEAN时如何接受初始化参数 36 142、使用JSP如何获得客户浏览器的信息? 36 143、能象调用子程序一样调用JSP吗? 36 144、当我重编译我的JSP使用的一个类后,为什么JVM继续使用我的老CLASS...

    zadaciZaSamostalanRad24.12.14.II

    练习事件处理 创建一个绘制圆并允许您在自由空间中移动圆的程序。 以多种方式编写相同的程序: 这样每个事件处理程序都写在一个单独的... 所以主类具有使用匿名类初始化的事件处理程序的静态字段。 祝你好运,埃米尔

    疯狂JAVA讲义

    5.3.2 成员变量的初始化和内存中的运行机制 128 5.3.3 局部变量的初始化和内存中的运行机制 130 5.3.4 变量的使用规则 130 5.4 隐藏和封装 132 5.4.1 理解封装 132 5.4.2 使用访问控制符 132 5.4.3 package和...

    w08ZadacaEventHandling

    w08ZadacaEventHandling 埃米尔: 几种方式练习事件处理(一个我们可以移动的圆圈) 这样每个事件处理程序都写在一个单独的类中 :multiply: ... 所以主类具有使用匿名类初始化的事件处理程序的静态字段。 :multiply:

    TCP-IP详解卷1:协议

    9.2.2 初始化路由表 86 9.2.3 较复杂的路由表 87 9.2.4 没有到达目的地的路由 87 9.3 ICMP主机与网络不可达差错 88 9.4 转发或不转发 89 9.5 ICMP重定向差错 89 9.5.1 一个例子 90 9.5.2 更多的细节 91 9.6 ICMP...

    javaSE代码实例

    15.4.3 匿名内部类的初始化 337 15.4.4 匿名内部类作用的体现 337 15.5 理解内部类 339 15.6 内部接口 340 15.6.1 定义在类中的内部接口 340 15.6.2 定义在接口中的内部接口 341 15.7 小结 342 第16...

    JAVA实验报告

    (三)建立独立运行的窗口界面并使用匿名类 36 (四)使用 Swing 组件 39 (五)使用自定义对话框与内部类 41 实验6 图形处理 44 一、实验目的 44 二、实验要求 44 三、实验内容 44 (一)使用图形类 Graphics 44 ...

    java初学者必看

    3.5.2 变量赋值和初始化 3.5.3 常量 3.6 类型转化 3.6.1 数值类型之间的转换 3.6.2 强制类型转换 3.7 运算符 3.7.1 算术运算符 3.7.2 关系运算符 3.7.3 逻辑运算符 3.7.4 位运算符 3.7.5 自动递增和递减 ...

    C#语言规范(4.0版本)

    10.5.5.1 静态字段初始化 294 10.5.5.2 实例字段初始化 295 10.6 方法 296 10.6.1 方法形参 298 10.6.1.1 值参数 299 10.6.1.2 引用形参 299 10.6.1.3 输出形参 300 10.6.1.4 形参数组 301 10.6.2 静态方法和实例...

    轻松学C#(图解版)

    1.2.4 初始化配置 7 1.3 第一个程序—Hello World 8 1.4 小结 11 1.5 习题 12 第二篇 面向对象基础篇 第2章 类和对象 16 2.1 分析Hello World程序 16 2.2 语法规范 17 2.2.1 标识符 17 2.2.2 关键字 18 2.2.3 注释...

    C#教程(语言规范)

    7.15.4.2 局部变量实例化 ... 186 7.15.5 匿名函数表达式的计算 188 7.16 查询表达式 ... 188 7.16.1 查询表达式中的多义性 189 7.16.2 查询表达式转换... 189 7.16.2.1 带有延续部分的 Select 和 groupby 子句...

    C# 程序设计手册(WORD)

    使用集合初始化表达式来初始化字典 220 嵌套类型 221 部分类别和方法 222 限制 224 匿名型别 227 在查询中传回项目属性的子集 229 界面 230 明确界面实作 232 明确实作接口成员 234 使用继承明确实作接口成员 236 ...

Global site tag (gtag.js) - Google Analytics