嵌套

Java-嵌套接口

偶尔善良 提交于 2020-01-23 21:22:39
Java-嵌套接口 1. 什么是嵌套接口 嵌套接口可以被称为 inner interface,也可以称为 nested class。 接口可以嵌套在类或者其他接口中。 当在类中嵌套接口时可以是 public、private 以及默认包访问权限。 当在接口中嵌套接口时,其必须为 public(由于接口的性质,其默认也是public)。 为什么使用嵌套接口: 当一个接口只会在另一个接口中使用时,这样设计符合逻辑; 有利于封装(良好的框架不应该暴露给用户过多的实现细节,包括接口); 嵌套接口更具可读性以及可维护性;  在 Java 类库中一个典型的嵌套接口的例子是 java.util.Map 以及 Java.util.Map.Entry 。 java.util.Map 在这里也起到了命名空间的作用。关于命名空间详细点说就是如果这个 Entry 不做为 Map 接口的一个内部接口,那么为了说明这个接口是用于 Map 的实现的一部分,就应该取名为 MapEntry。那么对于企业级别的框架设计而言,这将会有非常多的 MapEntry。一般用户却不需要实现这些接口,但是这些接口却和 Map 这些可能被用户实现的接口在同一级别上,不利于阅读。   Entry 类不属于全局作用域,这也就意味着很多是 Entry 类型的 Entry 对象并不是 java.util.Map 类型。这里的 Java

Kotlin学习系列——类和对象(class/Object)

左心房为你撑大大i 提交于 2020-01-23 03:18:58
主构造器 主构造器中不能包含任何代码,初始化代码可以放在初始化代码段中,初始化代码段使用 init 关键字作为前缀。 class Person constructor ( firstName : String ) { init { println ( "FirstName is $firstName " ) } } 注意:主构造器的参数可以在初始化代码段中使用,也可以在类主体n定义的属性初始化代码中使用。 一种简洁语法,可以通过主构造器来定义属性并初始化属性值(可以是var或val): class People ( val firstName : String , val lastName : String ) { //... } 如果构造器有注解,或者有可见度修饰符,这时constructor关键字是必须的,注解和修饰符要放在它之前。 实例 创建一个 Runoob类,并通过构造函数传入网站名: class Runoob constructor ( name : String ) { // 类名为 Runoob // 大括号内是类体构成 var url : String = "http://www.runoob.com" var country : String = "CN" var siteName = name init { println ( "初始化网站名: ${ name

接口服务数据格式技巧

做~自己de王妃 提交于 2020-01-22 07:59:17
需求背景 在同其他应用交互的过程中,我们常常需要提供以接口的方式,暴露应用数据或功能。在提供数据这块内容中,常常是需要约定双方的各自的数据格式要求,以满足通讯的需要 现在大部分的数据格式为json格式,在go语言中,json也得到了很好的支持,可以很方便的将结构体转换为json数据 在这篇文章中,我简要地演示下针对特定的数据格式,我们在go语言中如何去设计相关的结构体,从而方便我们的编程,更清晰地写出较强逻辑性的代码 演示 数据要求 假设我们需要提供的数据格式内容如下: [ { "name" : "offline" , "servity" : [ { "level" : "3级" , "count" : 0 } , { "level" : "4级" , "count" : 0 } , { "level" : "5级" , "count" : 4 } ] } , { "name" : "SQL" , "servity" : [ { "level" : "3级" , "count" : 0 } , { "level" : "4级" , "count" : 0 } , { "level" : "5级" , "count" : 4 } ] } , ... ] 数据格式分析 分析这个数据格式,这是一个列表,里面包含了多个元素,每个元素为map类型,在键值为“servity”中

Python深浅拷贝

强颜欢笑 提交于 2020-01-21 17:41:08
浅拷贝(shallow copy) 通俗易懂的说法为: 只复制容器,并不复制值。 浅拷贝会创建新对象,其内容非原对象本身的引用,而是原对象内第一层对象的引用。 浅拷贝有三种形式:切片操作、工厂函数、copy 模块中的 copy 函数。 copy 函数:b = copy.copy(a) 浅拷贝产生的列表 b 不再是列表 a 了,使用 is 判断可以发现他们不是同一个对象,使用 id 查看, 他们也不指向同一片内存空间。但是当我们使用 id(x) for x in a 和 id(x) for x in b 来查看 a 和 b 中元素的地址时,可以看到二者包含的元素的地址是相同的。 在上述情况下,列表 a 和 b 是不同的对象,修改列表 b 理论上不会影响到列表 a。 但是要注意的是,浅拷贝之所以称之为浅拷贝,是它仅仅只拷贝了一层,在列表 a 中有一个嵌套的list,如果我们修改了它,情况就不一样了。 比如:a[3].append(‘java’)。查看列表 b,会发现列表 b 也发生了变化,这是因为,我们修改了嵌套的 list,修改外层元素,会修改它的引用,让它们指向别的位置,修改嵌套列表中的元素,列表的地址并未发生变化,指向的都是用一个位置。 深拷贝(deep copy) 通俗易懂的说法: 复制容器也复制可变的值 深拷贝只有一种形式,copy 模块中的 deepcopy()函数。

20路由嵌套以及路由重定向

依然范特西╮ 提交于 2020-01-20 19:47:52
路由嵌套:   SPA中,一个组件如果支持动态加载其他组件作为子组件,渲染特定的内容,可以让功能更强大,路由嵌套就可以帮忙实现这个功能。所谓的路由嵌套就是指:在一个SPA的某个组件中,指定一个容器,该容 器可以按需加载其他组件   实现步骤   ①在准备加载其他组件的组件中,指定一个容器 router-outlet   ②创建要加载的子组件   ③配置子组件的路由地址    demo16/             重定向,当需要重定向时,可以通过 redirectTo,重定向到指定的组件,有一个前提,必须配合 pathMatch属性指定为 full { path:' ', redirectTo: ' /mail/inbox ', pathMatch : 'full ' } 来源: https://www.cnblogs.com/shanlu0000/p/12218961.html

看完这篇傻瓜都会Vue路由嵌套页面(最详细)

浪子不回头ぞ 提交于 2020-01-20 12:25:13
首先在App.vue文件下加入如下 再到router---->index.js编写路由的js 在这里我的主体是统一在Main.vue页面渲染所有嵌套子页面写在了Main下面,这里需要注意的是(children)这个是重点 我们需要在Main.vue(主页)中进行子页面的注册,把子页面都引入主页面直接看结构吧 圈起来的地方(router-view)是你需要在哪里渲染,什么位置,这个可以自行调整 到这里就完成了页面嵌套,最后给大家看一下完成效果是什么样的 来源: CSDN 作者: 培训班出来的 链接: https://blog.csdn.net/qq_666123/article/details/104048582

DAG上的动态规划

一个人想着一个人 提交于 2020-01-20 05:38:06
不定终点的最长路: 矩阵嵌套问题: 题目链接: http://acm.nyist.net/JudgeOnline/problem.php?pid=16 题目大意: 如果一个矩形的长和宽都大于另一个矩形,那么说这个矩形可以嵌套另一个矩形,现在有很多个矩形,输入矩形的长宽,求出他们的最大嵌套数。注意矩形的长宽是可以互换的。 题目分析: 这是一道经典的DAG上的动态规划问题,需要把问题转化成DAG上的最长路问题,把每个矩形看成点,如果两个矩形可以嵌套,那么他们建边,这样问题就是求最长路了。 状态的定义是对于第 i 个节点,由他出发最长的距离,根据边转移,如果一个矩形可以装下另一个矩形,那么这个矩形出发的最长距离就是他可以装下的那个矩形的最长距离加一。 递归边界是隐含的,如果一个矩形无法嵌套嵌套的矩阵,那么由他出发的最长距离是 1 ,即只有他本身。 AC代码: #include<bits/stdc++.h> using namespace std; int edge[1123][1123]; int d[1123], n; int dp(int i) { int& ans = d[i]; if (ans > 0) return ans; ans = 1; for (int j = 0; j < n; j++) { if (edge[i][j]) ans = max(ans, dp(j)+1

Android 嵌套滑动详解

戏子无情 提交于 2020-01-20 00:25:07
参考: Android嵌套滑动讲解简书: https://www.jianshu.com/p/f4763bf8f9ba 方法总结 startNestedScroll : 起始方法, 主要作用是找到接收滑动距离信息的外控件. dispatchNestedPreScroll : 在内控件处理滑动前把滑动信息分发给外控件. dispatchNestedScroll : 在内控件处理完滑动后把剩下的滑动距离信息分发给外控件. stopNestedScroll : 结束方法, 主要作用就是清空嵌套滑动的相关状态 setNestedScrollingEnabled和isNestedScrollingEnabled : 一对get&set方法, 用来判断控件是否支持嵌套滑动. dispatchNestedPreFling和dispatchNestedFling : 跟Scroll的对应方法作用类似NestedScrollingParent onStartNestedScroll : 对应startNestedScroll, 内控件通过调用外控件的这个方法来确定外控件是否接收滑动信息. onNestedScrollAccepted : 当外控件确定接收滑动信息后该方法被回调, 可以让外控件针对嵌套滑动做一些前期工作. onNestedPreScroll : 关键方法,

关于嵌套对象属性的@NotBlank无效问题的解决思路

混江龙づ霸主 提交于 2020-01-19 17:50:34
  我们在平常开发写接口时对于一些必填的请求参数除了前端那边加上校验外,在后端往往也是需要加上校验的,但不知道你们有没有遇到过在嵌套对象中加入对于某个字段加上了@NotBlank找个注解,但是这个注解只对于null做了校验,对于""(空值)的情况却失效了。举个栗子,比如我想对下图中这个对象中的字段进行校验,具体的图如下所示:   从以上代码来看,大家可以很清晰的知道我想对IndexInfoModel对象中的useType这个字段做校验,但实际的效果就如我刚开始说得那样,这个注解只对于useType为null时做了校验,对于useType为""(空值)的情况却失效了。那么怎么解决呢?经过google,发现还真有一个不错的解决方法,而且非常简单!直接在IndexInfoModel对象上加上 @Valid 这个注解就可以了,如下图所示:   那么问题来了,为什么加上这个注解就可以了?难道这个注解这么神奇?我们可以看下@Valid的内部构造,具体代码我已经贴出来,如下所示: /** * Marks a property, method parameter or method return type for validation cascading. * <p> * Constraints defined on the object and its properties are be

函数的作用域链的理解

强颜欢笑 提交于 2020-01-17 23:19:11
1. 作用域 (scope):在javascript 没有块级作用域 ,是由函数来划分的。 变量和函数的作用域是在定义时决定而不是执行时决定 ,也就是说词法作用域取决于源码,通过静态分析就能确定,因此词法作用域也叫做静态作用域(with和eval除外)。当定义了一个函数,当前的作用域链就保存起来,并且成为函数的内部状态的一部份。在最顶级作用域链仅由全局对象组成,而不和词法作用域相关,然而,当定义一个嵌套的函数时,作用域链就包括外面的包含函数。这意味着嵌套函数可以访问包含函数的所有参数和局部变量。尽管当一个函数定义时作用域链就固定了,但作用域链中定义的属性还没有固定。作用域链是活的,并且函数被调用时,可以访问任何当前的绑定。 2. 作用域链 (scope chain):存储 变量对象 的集合( 环境栈 ?),保证对执行环境有权访问的所有变量和函数的有序访问,也就是用于标识符解析(变量访问)。 3. 执行环境 (execution context):定义了变量和函数有权访问的其他数据,决定了它们的各自行为。每个执行环境都有一个与之关联的变量对象。 在web浏览器中,window对象就是全局执行环境。每个函数都有自己的执行环境,当函数执行完毕,该环境被销毁,保存在其中的变量和函数也随之销毁。 4. 变量对象 (variable object):保存了环境中定义的所有变量和函数