Java静态内部类——重点是精妙的demo
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/cd18333612683/article/details/79129503
什么是内部类
大部分时候,类被定义成一个独立的程序单元。在某些情况下,也会把一个类放在另一个类的内部定义,这个定义在其他类内部的类就被称为内部类(有些地方也叫做嵌套类),包含内部类的类也被称为外部类(有些地方也叫做宿主类)
作用??
更好的封装性
内部类成员可以直接访问外部类的私有数据,因为内部类被当成其外部类成员,但外部类不能访问内部类的实现细节,例如内部类的成员变量
匿名内部类适合用于创建那些仅需要一次使用的类
静态or非静态??
使用static来修饰一个内部类,则这个内部类就属于外部类本身,而不属于外部类的某个对象。称为静态内部类(也可称为类内部类),这样的内部类是类级别的,static关键字的作用是把类的成员变成类相关,而不是实例相关
注意:
1.非静态内部类中不允许定义静态成员
2.外部类的静态成员不可以直接使用非静态内部类
3.静态内部类,不能访问外部类的实例成员,只能访问外部类的类成员
Demo
今天这个Demo展示了通过内部类来实例化pojo对象
我们首先来看看一遍的pojo对象如何编写,无非就是字段+set get方法,如下所示:
public class EmpTest {
private Integer id;
private Integer empLevel;
private String mapingOrderLevel;
private String empNo;
private Integer orderNumLimit;
public static final class Builder {
private Integer id;
private Integer empLevel;
private String mapingOrderLevel;
private String empNo;
private Integer orderNumLimit;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Integer getEmpLevel() {
return empLevel;
}
public void setEmpLevel(Integer empLevel) {
this.empLevel = empLevel;
}
public String getMapingOrderLevel() {
return mapingOrderLevel;
}
public void setMapingOrderLevel(String mapingOrderLevel) {
this.mapingOrderLevel = mapingOrderLevel;
}
public String getEmpNo() {
return empNo;
}
public void setEmpNo(String empNo) {
this.empNo = empNo;
}
public Integer getOrderNumLimit() {
return orderNumLimit;
}
public void setOrderNumLimit(Integer orderNumLimit) {
this.orderNumLimit = orderNumLimit;
}
}
添加了内部类的实体定义如下:(已经不再是严格的POJP)
public class EmpTest {
private Integer id;
private Integer empLevel;
private String mapingOrderLevel;
private String empNo;
private Integer orderNumLimit;
//外部类私有的构造方法
private EmpTest(Builder builder) {
setId(builder.id);
setEmpLevel(builder.empLevel);
setMapingOrderLevel(builder.mapingOrderLevel);
setEmpNo(builder.empNo);
setOrderNumLimit(builder.orderNumLimit);
}
//对外提供初始化EmpTest类的唯一接口,通过这个方法,获得内部类的实例
public static Builder newBuilder() {
return new Builder();
}
//静态内部类:Builder
public static final class Builder {
private Integer id;
private Integer empLevel;
private String mapingOrderLevel;
private String empNo;
private Integer orderNumLimit;
public Builder() {
}
public Builder id(Integer val) {
id = val;
return this;
}
public Builder empLevel(Integer val) {
empLevel = val;
return this;
}
public Builder mapingOrderLevel(String val) {
mapingOrderLevel = val;
return this;
}
public Builder empNo(String val) {
empNo = val;
return this;
}
public Builder orderNumLimit(Integer val) {
orderNumLimit = val;
return this;
}
//通过内部类的build方法,实例化外部类,并给其实例各个字段赋值
public EmpTest build() {
return new EmpTest(this);
}
}
public Integer getId() {
return id;
}
//...下边的get set 方法省略,和第一段一样
}
//初始化20个员工实例:
for(int i=0;i<20;i++){
empList.add(EmpTest.newBuilder().empLevel(getRandom(5)).empNo("Emp_"+i).id(i).mapingOrderLevel(getRandomChar()).orderNumLimit(getRandom(20)).build());
}
讲解:
1.EmpTest中 定义了一个Builder的静态内部类,还定义了一个newBuilder的公共静态方法,上边讲过加了static关键字,那么就是类相关,所以我不需要实例化外部类,直接使用外部类就可以调用newBuilder的方法
2.Builder的实例在调用各个内部类中的方法,给Builder的字段赋值
3.最后调用build()方法,实例化EmpTest,它的构造方法需要builder的对象,所以将builder的对象传入,通过builder的字段值给EmpTest的对象赋值
经过了静态内部类与静态方法相结合,给实体赋值的时候才能一句话(如下)就能完成任务,而不再需要通过传统的set方法
EmpTest类.newBuilder.id(“xxx”).empLevel(xxx)…..build();
---------------------
作者:Celine丹
来源:CSDN
原文:https://blog.csdn.net/cd18333612683/article/details/79129503
版权声明:本文为博主原创文章,转载请附上博文链接!
Java静态内部类——重点是精妙的demo的更多相关文章
- 《Java基础知识》Java静态内部类、匿名内部类、成员式内部类和局部内部类
内部类可以是静态(static)的,可以使用 public.protected 和 private 访问控制符,而外部类只能使用 public,或者默认. 成员式内部类 在外部类内部直接定义(不在方法 ...
- Java基础重点指南
Java基础重点指南 每个人都有自己的学习方法,下面是我学完Java后总结的一些要点: 一:(了解)Java诞生于1995年,由Sun公司开发.它把源代码编译成“中间码”,然后通过“Java虚拟机”把 ...
- Java 后端微信小程序支付demo (网上说的坑里面基本上都有)
Java 后端微信小程序支付 一.遇到的问题 1. 商户号该产品权限未开通,请前往商户平台>产品中心检查后重试 2.签名错误 3.已经调起微信统一下单接口,可以拿到预支付ID,但是前端支付的时候 ...
- Java微信扫描支付模式二Demo ,整合官网直接运行版本
概述 场景介绍 用户使用微信“扫一扫”扫描二维码后,获取商品支付信息,引导用户完成支付. 详细 代码下载:http://www.demodashi.com/demo/13880.html 一.相关配置 ...
- java 静态内部类小总结
内部类是指在一个外部类的内部再定义一个类.内部类作为外部类的一个成员,并且依附于外部类而存在的.内部类可为静态,可用protected和private修饰(而外部类只能使用public和缺省的包访问权 ...
- Java 静态内部类与非静态内部类 学习记录.
目的 为什么会有这篇文章呢,是因为我在学习各种框架的时候发现很多框架都用到了这些内部类的小技巧,虽然我平时写代码的时候基本不用,但是看别人代码的话至少要了解基本知识吧,另外到底内部类应该应用在哪些场合 ...
- java servlet 代码样例 (demo)
今天又搞了下jsp +servlet 的代码样例,感觉虽然搭了好多次,可是每次还是不记得那些参数,都要去网上搜索,索性自己把这次的简单demo给记录下来,供下次使用的时候直接复制吧. 这个web逻辑 ...
- java静态内部类理解
在Java世界里,经常被提到静态这个概念,static作为静态成员变量和成员函数的修饰符,意味着它为该类的所有实例所共享,也就是说当某个类的实例修改了该静态成员变量,其修改值为该类的其它所有实例所见. ...
- Java多线程同步问题:一个小Demo完全搞懂
版权声明:本文出自汪磊的博客,转载请务必注明出处. Java线程系列文章只是自己知识的总结梳理,都是最基础的玩意,已经掌握熟练的可以绕过. 一.一个简单的Demo引发的血案 关于线程同步问题我们从一个 ...
随机推荐
- C语言怎么实现可变参数
可变参数 可变参数是指函数的参数的数据类型和数量都是不固定的. printf函数的参数就是可变的.这个函数的原型是:int printf(const char *format, ...). 用一段代码 ...
- Java基础之反射总结
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意方法和属性:这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制. ...
- box-shadow详解
今天课堂上有学生问到box-shadow这个属性,那么下面我们就来详细的解说下这个属性它的用法,box-shadow是css3中的一个属性,它可以向框添加一个或多个阴影. 首先我们来看它的语法: bo ...
- 【codeforces1058】Vasya and Golden Ticket 枚举+暴力+模拟
#点击传送 题目描述 Recently Vasya found a golden ticket - a sequence which consists of nn digits a1a2-ana1a2 ...
- python中的abstractmethod
# -*- coding: utf-8 -*- from abc import ABC ,abstractclassmethod from collections import namedtuple ...
- QLabel的使用
现在学习一个简单的控件Label. 第一步:打开designer.exe.拖动一个控件到主窗口,双击可以编辑文字. 第二步:设置字体大小 第三步:设置文字颜色 第四步:设置背景色 第五步:将文字居中 ...
- 【动画消消乐】HTML+CSS 白云飘动效果 072
前言 Hello!小伙伴! 非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出- 自我介绍 ଘ(੭ˊᵕˋ)੭ 昵称:海轰 标签:程序猿|C++选手|学生 简介:因C语言结识编程,随后转入计 ...
- idea 提示不能打开cmd.exe,idea 编译项目 CreateProcess error=740, 请求的操作需要提升 --->如何设置cmd以管理员身份运行
问题描述:idea 编译项目 idea 编译项目 CreateProcess error=740, 请求的操作需要提升 CreateProcess error=740, 请求的操作需要提升 全网搜索可 ...
- element UI table 状态显示:禁用-启用 上架-下架
vue2.0+elementUI 解决表单上架下架状态的切换 https://blog.csdn.net/weixin_42507803/article/details/81910297 <el ...
- header.mapper 用法
const header= [xxxx,xxxx] 基本用法是 const obj = header.map( item=>{ obj= item+'123'; return obj }) c ...