首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

匿名vs命名的内部类? - 最佳做法?

匿名内部类和命名内部类是Java编程中的两种不同的内部类实现方式。它们在使用场景和最佳实践方面有所不同。

匿名内部类:

匿名内部类是没有名字的内部类,通常用于简单的实现一个接口或者继承一个类的情况。匿名内部类的优势在于代码简洁,易于阅读和理解。它们通常用于实现回调函数、监听器或者简单的实现一个接口的场景。

命名内部类:

命名内部类是有名字的内部类,通常用于更复杂的实现或者需要多个内部类的情况。命名内部类可以被外部类直接访问,并且可以被重复使用。命名内部类的优势在于代码的可读性和可维护性。

最佳实践:

在选择匿名内部类或命名内部类时,需要考虑以下几点:

  1. 代码的简洁性和可读性:如果实现的功能比较简单,可以使用匿名内部类。如果实现的功能比较复杂,或者需要多个内部类,可以使用命名内部类。
  2. 代码的可维护性:如果需要重复使用内部类,或者需要在外部类中访问内部类,建议使用命名内部类。如果内部类只在当前类中使用,可以使用匿名内部类。
  3. 性能:匿名内部类和命名内部类的性能差异不大,但是在大量使用内部类的情况下,命名内部类可能会占用更多的内存。

总之,在选择匿名内部类或命名内部类时,需要根据实际情况进行权衡和选择。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

静态类、静态方法、内部类匿名部类、非静态类一些实践

作者:A哥(YourBatman) 目录 前言 正文 静态内部类 vs部类 静态方法 vs 非静态方法 匿名部类部类和静态内部类区别 静态类 和普通内部类区别 内部类面试题 总结 前言...但如果这个类是内部类,是可以这样写:public static class A 静态内部类 vs部类 静态内部类:只是为了降低包深度,方便类使用,实现高聚。...非静态内部类:它有一个很大优点:可以自由使用外部类所有变量和方法,对其外部类有个引用 有了这两个区别,各位看官应该知道什么时候使用什么样类了吧 静态方法 vs 非静态方法 静态方法(Static...API回调函数以静态函数形式封装到类内部 匿名部类 那么,匿名部类有什么好处呢?...其实,这个做法,我是在spring-boot中HttpMessageConverters类中看到: HttpMessageConverters: private List<HttpMessageConverter

88750

【Java基础】类成员总结(属性,方法,构造器,代码块,内部类

先声明,后使用 1.3 变量都有其对应作用域 2.不同点: 2.1 在类中声明位置不同 属性:直接定义在类一对{} 局部变量:声明在方法、方法形参、代码块、构造器形参、构造器内部变量...,这样类称为内部类,广泛意义上部类一般包括四种:成员内部类,局部内部类匿名部类,静态内部类 。...言外之意,不使用final,就可以被继承 可以被abstract修饰,可以被static修饰 2.局部内部类 (1)局部内部类是定义在一个方法或者一个作用域里面的类,它和成员内部类区别在于局部内部类访问仅限于方法或者该作用域...3.匿名部类 (1)一般使用匿名部类方法来编写事件监听代码; (2)匿名部类是不能有访问修饰符和static修饰符; (3)匿名部类是唯一一种没有构造器类; (4)匿名部类用于继承其他类或是实现接口...在Java中,可以将一个类定义在另一个类里面或者一个方法里边,这样类称为内部类,广泛意义上部类一般包括四种:成员内部类,局部内部类匿名部类,静态内部类

49130

带你了解C#每个版本新特性

部类(Partil) 分部类可以允许我们在多个文件中为一个类型(class、struct、interface)编写代码,在Asp.Net2.0中用极为广泛。...新建一个Aspx页面,页面的CodeBehind和页面中控件定义就是通过分部类来实现。...来定义,当一个类中代码非常多时,可以使用分部类来进行拆分,这对代码阅读很有好处,而且不会影响调用。...匿名类型是在初始化时候根据初始化列表自动产生类型一种机制,利用对象初始化器来创建匿名对象对象,具体参见《C#3.0学习(3)—匿名类型(http://blog.fwhyy.com/2008/03...,之前做法是在类中写私有方法,现在可以让这个私有方法写在方法内部,提高代码可读性。

3.5K20

Java学习笔记 (成员内部类、静态内部类匿名部类、方法内部类

* 6、内部类编译后.class文件命名:外部类$内部类.class * 7、内部类中是否可以包含与外部类相同方法签名方法 */ public class Heart...外部类中可以通过“ 类名· 成员名" 方式直接访问内部类中静态成员 定义在外部类方法中部类, 也称局部内部类。 方法内部类只在其定义所在方法内部可见, 即只在该方法可以 使用。...方法内部类只在其定义所在方法内部可见, 即只在该方法可以使用。 方法内部类不能使用访问控制符和static 修饰符, 但可以使用final和abstract 修饰。...以这种方法定义没有 名字类称为匿名部类。...因匿名部类也是局部内部类, 所以局部内部类所有限制都对其 生效。 一个匿名部类一定是在new 后面, 用其隐含实现一个接口或继承一个类, 但是两者不可兼得。 只能创建匿名部类一个实例。

45920

java内部类作用(三)----定义使用回调函数时候比较便捷---匿名部类(anonymous)

首先我们需要了解什么叫匿名部类:定义(JAVA核心技术上是这样说匿名部类(anonymous inner calss):将局部内部类使用再深入一步。...假如只创建这个类一个对象,就不必命名了。这种类被称为匿名部类。 话很少,说也很浅显,可能读完了还不知道什么叫匿名部类?...是的,确实有这种感觉, 重点就两个: 1.只创建这个类一个对象;->这个是从局部内部类中延伸来,整个代码中只有一次创建,没有说明什么 2.不必命名:->匿名部类是没有名字。...我们知道创建类是需要用到一个构造器,构造器名字与类名是同名。 现在匿名部类没有名字,肯定用不了构造器。也就是说匿名部类一定没有构造器。...这里就告诉我们,是不是所有的类都有构造器呢,不一定,匿名部类不能有构造器! 1.利用接口 换句话说,我们构造匿名部类是没有参数,或者把参数直接传递给超类构造器,想想,这在什么中用到呢?

1.3K30

Java编程思想学习录(连载之:内部类

部类基本概念 可将一个类定义置于另一个类定义内部 内部类允许将逻辑相关类组织在一起,并控制位于内部可见性 甚至可将内部类定义于一个方法或者任意作用域!...与 .new 使用场景 .this用于在内部类中生成对其外部类对象引用之时,举例: .new用于直接创建内部类对象之时,距离: 嵌套类(static类型部类) 嵌套类是无需依赖其外部类对象...接口与内部类有着很有趣关系: 放到接口中任何类自动都是public且static,即接口中任何类都是嵌套类,我们甚至可以在接口部类中去实现其外围接口,举例: 在 方法 和 作用域 部类...方法中定义部类只能在方法被使用,方法之外不可访问,举例: 更进一步,可在任意作用域内定义内部类,举例: 匿名部类 直观上看,这种内部类没有“名字”,举例: 若想将外部参数传到匿名部类中(典型的如将外部参数用于对匿名部类定义字段进行初始化时...)使用的话,该参数必须final,举例: 匿名部类中不可能有命名显式构造器,此时只能使用实例初始化方式来模仿,举例(当然下面这个例子还反映了匿名部类如何参与继承): 匿名部类 + 工厂模式 =

467110

C++从入门到精通——内部类匿名

前言 内部类是定义在另一个类内部类,它可以访问外部类私有成员。匿名类是没有名字类,通常用于一次性使用简单对象创建,可以直接在需要使用地方定义,并传递给其他方法。...内部类匿名类都是C++等编程语言重要特性,它们可以简化代码结构,提高代码重用性。...在 C++ 中,匿名类是一种没有命名部类,它与匿名类似,但在 C++ 中有一些区别。...匿名声明和实例化通常在代码块内部完成,使用语法类似于在堆栈上创建对象。匿名定义和实例化通常在花括号,与代码块语法类似。...它可以用于一些需要局部定义简单类情况,而无需单独为其创建一个命名类。 尽管匿名类具有一定灵活性和便利性,但由于它作用域和无法重用特性,通常情况下更推荐使用命名类来组织和管理代码。

14310

Android(Java) | 你真的熟悉Java匿名部类吗(Java匿名部类限制)

,会引用外部类实例 只能捕获外部作用域final变量 创建时只有单一方法接口可以用Lambda转换 a.匿名部类名字 表面上是没有引用名, 但其实是有用于定位“名字”, ?...定义出来一个用于定位“名字”, 这个“名字”可见上面代码第二行, “com.bennyhuo.iiv.ch1.”即代码包名, “OuterClass$1”即外部名$1, 1代表这个匿名部类...只能捕获外部作用域final变量 >- 创建时只有单一方法接口可以用Lambda转换 ####a.匿名部类名字 表面上是没有引用名, 但其实是有用于定位“名字”,..., 所以OuterClass()实例也会在这里(左上第四行)new出来; 而下方Client$1就是上述所说匿名部类类型了, Client$1命名格式其实就是刚刚说外部名$匿名部类序号...; 00 01 10 11 捕获 匿名部类 所在方法(外部作用域) 局部变量快照情况 匿名部类重写父类方法时,引用到外部方法体内局部final变量 通常,要求要被捕获局部变量

1.8K60

Java 高级开发必修知识---内部类

方法内部类 把类放在方法 package cn.internal; /** * * @author: 房上猫 * * @time: 下午9:08:33 * * @博客地址: https...但是该方法结束之后,在方法创建部类对象可能仍然存在于堆中!例如,如果对它引用被传递到其他某些代码,并存储在一个成员变量。...匿名部类声明格式如下: new ParentName(){ ...// 内部类定义 } 匿名部类就是没有名字部类。什么情况下需要使用匿名部类?...如果满足下面的一些条件,使用匿名部类是比较合适: ·只用到类一个实例 。 ·类在定义后马上用到。 ·类非常小(SUN推荐是在4行代码以下) ·给类命名并不会导致你代码更容易被理解。...事实并非如此,接口式匿名部类是实现了一个接口匿名类。而且只能实现一个接口 C、参数式匿名部类

63690

Java Lambda表达式:一旦学会就回不去了,谁用谁知道

Lambda表达式是函数式接口内联实现,可以替代某些匿名部类。...命名Lambda表达式 Java中每一个对象都有一个类型;Lambda表达式也是如此。Lambda表达式类型可以是任何一个函数式接口,其中Lambda表达式是具体值。...命名Lambda表达式是通过使用适当函数式接口作为其类型,就像命名任何一个普通对象一样。...表达式 现在,您可以看到Lambda表达式几乎取代了匿名部类,因为它具备了内部类基本功能特性:映射到返回值。...Lambda表达式可以作为参数传递给方法,并用于方法表达式: // ... printSum(adder); // ... static void printSum(Calculator cal)

38610

Java Review (十五、面向对象----内部类)

局部内部类是定义在一个方法或者一个作用域里面的类,它和成员内部类区别在于局部内部类访问仅限于方法或者该作用域。...它作用域被限定在声明这个局部类块中。 匿名部类 将局部内部类使用再深人一步。 假如只创建这个类一个对象,就不必命名了。...,需要实现方法 actionPerformed 定义在括号。...SuperType 如果是一个类,内部类就要继承这个类。 关于匿名部类还有如下两条规则。 匿名部类不能是抽象类,因为系统在创建匿名部类时,会立即创建匿名部类对象。...因 此不允许将匿名部类定义成抽象类。 匿名部类不能定义构造器。由于匿名部类没有类名,所以无法定义构造器,但匿名部类 可以定义初始化块,可以通过实例初始化块来完成构造器需要完成事情。

33530

Java内部类总结 (吐血之作)

只是将嵌套类置于接口命名空间内,这并不违反接口规则)   D:匿名部类(from thinking in java 3th)   简单地说:匿名部类就是没有名字部类。...·类非常小(SUN推荐是在4行代码以下)   ·给类命名并不会导致你代码更容易被理解。   在使用匿名部类时,要记住以下几个原则:   ·匿名部类不能有构造方法。   ...如果只是简单地给一个成员变量赋值,那么此例中方法就可以了。但是,如果你想做一些类似构造器行为,该怎么办呢?在匿名类中不可能有已命名构造器(因为它根本没名字!)...因为i 被传递给匿名基类构造器,它并不会在匿名类内部被直接使用。下例是带实例初始化“parcel”形式。注意dest()参数必须是final,因为它们是在匿名被使用。...这个例子说明,当你继承了某个外围类时候,内部类并没有发生什么特别神奇变化。这两个内部类是完全独立两个实体,各自在自己命名空间内。

59910

【Java】基础20:比较难懂部类

若是内部类在成员变量处,那它就是成员内部类; 若是内部类在成员方法,那它就是局部内部类。 一、成员内部类 代码如下: ? ①内部类可以直接访问外部类成员变量,包括私有成员变量。...比如:OuterClass$InterClass.class 二、局部内部类部类也可以定义在成员方法中,这种情况叫局部内部类。 内部类只能在方法中或者某个作用域访问。...如果不是final类型,会出现外部类局部变量改变了,但是内部类存储还是以前那个数据情况。 三、匿名部类 除了成员内部类、局部内部类,还有一个匿名部类。 什么叫匿名部类呢?...①匿名部类就相当于,在常规方法中People对象,但是因为使用匿名部类的话不需要建立子类,故没有子类名,便直接用父接口命名代替,这也是格式:new Sing(){}由来。...②调用自己重写后方法。 匿名部类在父类是抽象类时候也可以使用,和接口时格式是一样。 总结: ?

27710

Java 内部类意义及应用

网上看到有人用一个词评论了 sun 公司这种做法,觉得挺贴切,叫「矫枉过正」,多继承也不是一无是处,在一些需要大量复用代码情境下,也不失为一个好解决方式。...当然,这里特殊命名规则其实就是:外部类名 + $ + 内部类名。 那么,既然内部类会被单独编译出来,那它如何保持与外部类联系呢,我们反编译一下字节码文件。 ? ?...由于静态内部类内部只能访问它外部静态成员,而对于访问权限可见情况下,这两个类本质上毫无关联,但如果像我们此例中部类属性 name 而言,它本身被修饰为 private,不可见于外部任何类。...如果方法是实例方法,那么方法部类可以访问外围类任意成员,如果方法是静态方法,那么方法内部部类只能访问外围类静态成员。...后来手动改它值,发现不能改) 匿名部类 匿名部类,顾名思义,是没有名字类,那么既然它没有名字,自然也就无法显式创建出其实例对象了,所以匿名部类适合那种只使用一次情境,例如: ?

1K40

9-Lambda表达式

匿名部类 没有名字局部内部类匿名部类目的是为了简化代码。...t.func2(); //调用子类重写方法 } } 特点 匿名部类是一个没有名字匿名部类一旦写出来,就会立即创建一个匿名部类对象返回(用父类接收) 匿名部类对象类型相当于是当前...new那个类(父类)子类类型 Lambda表达式 Lambda表达式是JDK1.8开始之后新技术,是一种代码新语法,是一种特殊写法 作用 核心目的是为了简化匿名部类代码写法 格式 (匿名部类被重写方法形参列表...)->{ 被重写方法方法体代码...... } 使用前提 Lambda表达式并不能简化所有匿名部类写法 Lambda表达式只能简化函数式接口匿名部类写法 函数式接口匿名部类 首先必须是接口...Gym",20,"Woman"); //批量向数组插入数据 Collections.addAll(lists,s1,s2,s3); //按照年龄进行排序(匿名部类做法

19710

急速上手之Lambda表达式

比如:我们真的希望创建一个匿名部类对象吗?不。我们只是为了做这件事情而不得不创建一个对象。我们真正希望做事情是:将run方法体内代码传递给Thread类知晓。 ​...; } }).start(); } } ​ 这种做法是无可厚非:首先创建一个Runnable接口匿名部类对象来指定任务内容,再将其交给一个线程来启动。...->是新引入语法格式,代表指向动作。 大括号语法与传统方法体要求基本一致。 使用前提: Lambda表达式并不能简化所有匿名部类写法。...Lambda表达式只能简化接口中只有一个抽象方法匿名部类形式。...其中Comparator接口实例(使用了匿名部类)代表了“按照年龄从小到大”排序规则。 代码分析 下面我们来搞清楚上述代码真正要做什么事情。

31620

Java与CC++不同一些基础知识点

类与文件 一个 java 文件可以写多个类,每个类里面可以有main函数,一个java文件里面只能有一个 public 类,此时 java 文件命名只能是public类名.java。...  内部类可以放在局部位置上   内部类在局部位置上只能访问局部中被final修饰局部变量 匿名部类      前提:内部类必须继承或者实现一个外部类或者接口。...匿名部类其实就是一个匿名子类对象。...InnerClassDemo4 { public static void main(String[] args)     { new Outer().method();     } } 注意:如下做法是错误...,那么函数必须要声明异常,否则必须在函数用try catch捕捉,否则编译失败 如果调用到了声明异常函数,要么try catch 要么throws, 否则编译失败 功能内容可以解决用catch,解决不了用

69600

java学习笔记(基础篇)—内部类

可以避免命名冲突。...5)局部内部类还可以访问所在方法中final类型局部变量。final延长局部变量生命周期。 d)匿名部类:在一个方法中定义部类,它可见范围是当前方法。和局部变量一样。...//在外部类部类外创建 实例内部类:new Outer().new Inner(); //在外部类外创建; this.new Inner();...//在外部类部类外创建 局部内部类:new Inner(); //只能在方法内部创建 匿名部类:new 类名()...外部类访问内部类: 静态内部类:通过完整类名直接访问静态内部类静态成员; 实例内部类:通过内部类实例去访问内部类成员; 局部内部类:不能访问; 匿名部类:不能访问; b.

56060

Java-内部类

在方法和作用域部类 可以在一个方法里面或者任意作用域内定义内部类。...2)定义在作用域类,此作用域在方法内部 3)实现了接口匿名类 4)匿名类,扩展了非默认构造器类 5)匿名类,执行字段初始化 6)匿名类,通过实例初始化实现构造(匿名类不可能有构造器...在匿名部类末尾分毫,并不是用来标记此内部类结束。实际上,它标记是表达式结束。只不过这个表达式正好包含了匿名部类而已。...局部内部类 可以在代码块里创建内部类,典型方式是在一个方法体地里面创建。局部内部类不能有访问说明符,因为它不是外部类一部分;但是它可以访问当前代码块常量,以及此外部类所有成员。...内部类也必须生成一个.class文件以包含它们Class对象信息。这些类文件命名有严格规则:外部类名字,加上“$”,再加上内部类名字。

49020

Java基础之——Lambda表达式

; } }; new Thread(task).start(); // 启动线程 } } 本着 “一切皆对象” 思想,这种做法是无可厚非:首先创建一个 Runnable 接口匿名部类对象来指定任务内容...这个 RunnableImpl 类只是为了实现 Runnable 接口而存在,而且仅被使用了唯一一次,所以使用匿名部类语法即可省去该类单独定义,即匿名部类: public class Demo04ThreadNameless...; } }).start(); } } 5.3、匿名部类好处与弊端 一方面,匿名部类可以帮我们省去实现类定义;另一方面,匿名部类语法——确实太复杂了!...代码语句 } 格式说明: 小括号语法与传统方法参数列表一致:无参数则留空;多个参数则用逗号分隔。...-> 是新引入语法格式,代表指向动作。 大括号语法与传统方法体要求基本一致。

32860
领券