一个接口通常用来定义实例方法的声明,而方法的实现则有继承类来完成.
如果继承类在实例化时需要外界传递参数,这时候对于匿名类来说,简直是梦魇.
因为匿名类的构造方式只能是默认的构造方法,不接收任何参数.
通常的解决办法是使用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();
}
}
分享到:
相关推荐
利用匿名内部类可以一次性初始化List,这种方式在代码中看起来比较简洁。 ```java List<String> names = new ArrayList() {{ add("Tom"); add("Sally"); add("John"); }}; System.out.println(names); ``` 5. ...
在这个主题中,我们将深入探讨"进度条"、"Lambda表达式"、"匿名方法"、"委托"、"类"、"集合"以及"初始化"这些核心概念,它们都是.NET框架中的重要组成部分。 首先,让我们来看一下"进度条"。在开发用户界面时,...
这种特性使得匿名内部类在某些特定情况下,比如初始化集合框架如Set、Map、List时,能提供更加简洁的代码。本文将深入探讨如何在Java中利用匿名内部类进行双括弧初始化的方法。 首先,让我们理解什么是匿名内部类。...
Java 在 HashMap 初始化时赋初值过程解析 ...本文介绍了 Java 中的 HashMap 初始化时赋初值过程解析,包括使用双括号进行初始化的语法和可能导致的串行化失败的问题,以及解决办法。希望对大家的学习有所帮助。
"Java中初始化List的5种方法示例" Java中初始化List有多种方法,本文将介绍五种常见的初始化方式。了解这些方法可以帮助开发者更好地使用Java中的List数据结构。 第一种方法:构造List后使用add方法初始化,这是最...
7. **构造器调用**:当内部类被继承时,由于内部类拥有对外部类的引用,所以在子类的构造器中必须显式调用`super()`来初始化这个引用。在代码示例中,`AnoClass`继承了`Outer.Inner`,并通过`wi.super();`调用了外部...
Java初始化List方法代码实例 Java初始化List方法代码实例主要介绍了Java中初始化List的六种方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值。 首先,List是Java集合框架中的...
值得注意的是,由于匿名对象是临时的,所以它们不能被声明为`final`,因为`final`变量必须在声明时初始化,而匿名对象的生命周期在声明后立即结束。同样,由于没有名字,匿名对象也不能作为返回值。 在“14-面向...
它可以直接继承一个类或实现一个接口,并且可以在声明的同时初始化。 1. **创建匿名内部类** - **作为局部变量**:在方法或代码块内声明,可以用来实现接口或者继承类。 ```java Button button = new Button() {...
本资源包含一系列详细注释的Java核心程序,这些代码旨在帮助理解和学习Java初始化的相关知识。 首先,Java中的初始化可以分为类初始化和对象初始化。类初始化主要涉及静态成员和静态块,当类被加载时执行。例如,类...
正点原子是一家知名的嵌入式开发工具供应商,其工程模板通常包含了基本的配置、初始化代码和例程,便于开发者快速上手。在“ANO_DT.h和ANO_DT.c”文件中,包含了与匿名上位机相关的代码,这些文件很可能是定义数据...
3. 它不能包含任何初始化块,包括实例初始化块和静态初始化块。 4. 它只能直接继承一个类或实现一个或多个接口。 5. 由于匿名内部类是局部的,所以它们的实例只能在创建它们的代码块中使用,例如在一个方法或一个...
例如,当我们仅仅是为了调用一个对象的方法或者初始化后立即使用这个对象时,可以创建所谓的**匿名对象**。 匿名对象是指没有显式名称的对象实例。例如: ```java new Student(); ``` 这段代码创建了一个`Student...
2. **次级构造函数**:在类定义内部,次级构造函数允许我们在不直接调用主构造函数的情况下初始化类。如果主构造函数有参数,那么每个次级构造函数都必须通过`constructor`关键字调用主构造函数。 ```kotlin open ...
5. **嵌入式编程**:在STM32端,开发者需熟悉C/C++编程,使用STM32CubeMX配置外设,生成初始化代码,然后在HAL(Hardware Abstraction Layer)库或LL(Low-Layer)库的基础上编写应用程序。 6. **调试与测试**:...
在匿名内部类中定义成员变量时,可以在声明时进行初始化,就像在常规类中一样。例如: ```java public class Parcel8 { public Destination dest(final String dest) { return new Destination() { private ...
1. 初始化I2C接口:设置I2C时钟、数据传输速率,以及初始化相关寄存器。 2. 设定MPU6050的工作模式:如开启陀螺仪和加速度计,设置采样率等。 3. 发送读写命令:通过I2C总线向MPU6050发送读或写指令,读取特定寄存器...
2. 非静态内部类不能声明静态初始化块和静态成员,除非它们是常量。 3. 如果内部类是在方法内定义的,它不能访问该方法的局部变量和参数,除非这些变量被声明为final。 匿名类是无名的类,通常用于快速创建一个只...
构造方法用于初始化对象,确保每个新实例都具备正确的初始状态,而匿名对象则常用于简化代码,特别是在需要短暂对象或者只需要一次性的回调功能时。 总结起来,Java中的构造方法和匿名对象是构建复杂程序的基础。...