instanceof

Spring扩展点之Aware接口族

久未见 提交于 2020-03-07 13:39:01
引言 Spring中提供了各种Aware接口,方便从上下文中获取当前的运行环境,比较常见的几个子接口有:BeanFactoryAware,BeanNameAware,ApplicationContextAware,EnvironmentAware,BeanClassLoaderAware等,这些Aware的作用都可以从命名得知 Aware 处理 其中 BeanNameAware 、 BeanClassLoaderAware 和 BeanFactoryAware 这三个是直接在bean的初始化之前就处理了的,具体代码在 AbstractAutowireCapableBeanFactory.initializeBean 方法中: protected Object initializeBean(String beanName, Object bean, RootBeanDefinition mbd) { // 判断对象实现的接口类型,处理特定的三种接口类型:BeanNameAware、BeanClassLoaderAware和BeanFactoryAware。 if (bean instanceof BeanNameAware) { ((BeanNameAware) bean).setBeanName(beanName); } if (bean instanceof

自定义SimpleAdapter

时光毁灭记忆、已成空白 提交于 2020-03-06 18:59:32
SimpleAdapter,跟名字一样,一个简单的适配器,既为简单,就只是被设计来做简单的应用的,比如静态数据的绑定,不过仍然有自定义的空间,比如说在每一个ListItem中加一个按钮并添加响应事件.首先还是先看一下SimpleAdapter的定义吧,直接翻译下SDK doc 吧:   这是一个简单的适配器,可以将静态数据映射到XML文件中定义好的视图。你可以指定由Map组成的List(比如ArrayList)类型的数据。在ArrayList中的每个条目对应List中的一行。Maps包含每一行的数据。你可以指定一个XML布局以指定每一行的视图,根据Map中的数据映射关键字到指定的视图。绑定数据到视图分两个阶段,首先,如果设置了SimpleAdapter.ViewBinder,那么这个设置的ViewBinder的setViewValue(android.view.View, Object, String)将被调用。如果setViewValue的返回值是true,则表示绑定已经完成,将不再调用系统默认的绑定实现。如果返回值为false,视图将按以下顺序绑定数据: 如果View实现了Checkable(例如CheckBox),期望绑定值是一个布尔类型。 TextView.期望绑定值是一个字符串类型,通过调用setViewText(TextView, String)绑定。

JavaScript引用类型

折月煮酒 提交于 2020-03-06 13:45:34
引用类型虽然看起来和类很相似,但是它们却是不同的概念,引用类型的值,也就是对象是引用类型的一个实例。在Js中引用类型主要有Object,Array,Date,正则,Function等。 数组Array   在Js中数组可以存储任意的数据,而且它的大小是可以动态调整的。创建数组可以使用构造函数的方式也可以使用字面量的形式,另外可以使用concat从一个数组中复制一个副本出来。 方法:    length 数组的长度    toString 将数组转换为一个字符串,并且返回这个字符串,相当于是调用了下join(',')    join 把数组中的所有元素放入一个字符串中,元素通过指定的分隔符进行分割的。如果省略参数,则会使用逗号作为分隔符。    push 向数组末尾添加一个或者多个元素,并返回新的长度。    pop 删除数组中的最后一项,把数组的长度减1,并且返回它被删除元素的值,如果数组变为空,则该方法不改变数组,返回undefine值。    shift 删除数组的第一项,返回值同pop    unshift 是向数组的开头添加一个或者更多元素,并返回新的长度。    reverse 倒序    concat 该方法用于连接2个或者多个数组。该方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本。如果连接多个数组,使用逗号隔开。    sort 该方法是对数组的元素进行排序

20175234 2018-2019-2 个人项目:数字黑洞

霸气de小男生 提交于 2020-03-05 20:58:11
目录 黑洞简介 需求分析 功能设计 测试运行 设计实现 核心代码及 码云链接 修改路上的坎坎坷坷 总结 PSP 参考资料 黑洞简介 数字黑洞是什么(以下链接可以直达,单个详细博客) 对于数学黑洞,无论怎样设值,在规定的处理法则下,最终都将得到固定的一个值,再也跳不出去了,就像宇宙中的黑洞可以将任何物质,以及运行速度最快的光牢牢吸住,不使它们逃脱一样。 西西弗斯黑洞 西西弗斯黑洞,即123黑洞,对任一整数,不断重复数出这个数中的偶数个数,奇数个数,及这个数中所包含的所有位数的总数,将数整理为“偶数个数,奇数个数,总位数”排列,最后必得出123的结果。 冰雹猜想 冰雹猜想是指,一个自然数x,如果是奇数就乘以3再加1,如果是偶数就析出偶数因数2ⁿ,这样经过若干个次数,最终回到1。 圣经数 任写一个3的倍数(正整数),把各位数字的立方相加,得出和,再把和的各位数字立方后相加,如此反复进行,最后必然出现“圣经数”。 数字黑洞1和4 数学黑洞1和4是指任取一个非0自然数,求出它的各个数位上数字的平方和,得到一个新数。再求出这个新数各个数位上数字的平方和,又得到一个新数。如此进行到最后只有两种情况: 出现1,之后永远都是1;出现4,之后开始按4、16、37、58、89、145、42、20循环。 需求分析 根据用户选择的黑洞类型,验证用户输入的正整数的黑洞情况。 功能设计

【Spring源码分析】非懒加载的单例Bean初始化过程(下篇)

牧云@^-^@ 提交于 2020-03-05 19:59:28
doCreateBean方法 上文 【Spring源码分析】非懒加载的单例Bean初始化过程(上篇) ,分析了单例的Bean初始化流程,并跟踪代码进入了主流程,看到了Bean是如何被实例化出来的。先贴一下AbstractAutowireCapableBeanFactory的doCreateBean方法代码: 1 protected Object doCreateBean(final String beanName, final RootBeanDefinition mbd, final Object[] args) { 2 // Instantiate the bean. 3 BeanWrapper instanceWrapper = null; 4 if (mbd.isSingleton()) { 5 instanceWrapper = this.factoryBeanInstanceCache.remove(beanName); 6 } 7 if (instanceWrapper == null) { 8 instanceWrapper = createBeanInstance(beanName, mbd, args); 9 } 10 final Object bean = (instanceWrapper != null ? instanceWrapper

javascript中的类型判断

两盒软妹~` 提交于 2020-03-05 07:46:23
typeof 判断变量的类型 typeof返回值对应 类型 返回值 String "string" Number "number" Boolean "boolean" undefined "undefined" Object "object" function "function" Symbol "symbol" typeof 的不足之处: 1、不能区分对象、数组、正则返回的都是“object” 2、Safar,Chrome7之前的版本对正则对象返回的是“function” 3、在IE6、7、8中,大多数的宿主对象是对象,而不是函数 如:typeof alert 注释:宿主对象:window、document,内置对象:Math、Date等;本地对象: 就是自己申明的对象 instanceof判断实例对象的构造函数是谁 实现原理:实例对象的__proto__这个属性,和构造函数的prototype这个属性是不是同一个引用 作用: 判断实例对象的构造函数是谁 function Student ( name ) { this . name = name ; } var stu = new Student ( '张珊' ) console . log ( stu instanceof Student ) ; // true 说明stu就是Student的实例 console . log

Spring Data JPA Specification Query

谁都会走 提交于 2020-03-05 05:35:21
private Specification<VO> createSpecification(final Map<String, String> filterData) throws Exception { final Map<String, String> filterOperators = new HashMap<>(); final Map<String, Object> filterParams = new HashMap(); extractFilterOperatorsAndParams(filterData, filterOperators, filterParams); Specification<VO> spec = new Specification<VO>() { @Override public Predicate toPredicate(Root<VO> root, CriteriaQuery<?> query, CriteriaBuilder cb) { List<Predicate> predicates = new ArrayList<>(); for (Map.Entry<String, Object> entry : filterParams.entrySet()) { //get path to leaf node Path<?> path =

数据类型判断Object.prototype.toString.call

淺唱寂寞╮ 提交于 2020-03-05 05:29:59
越学习越觉得基础的不牢固,不懂的,摸棱两可的,学了忘了的,在从入门到放弃的路上一直走着。今天分享一下数据类型判断的方法。 typeof: 很简单的使用,可以区分基础数据类型string、boolean、number、null、undefined、symbol,缺点就是没办法判断对象object: console.log(typeof Symbol(''));//symbol console.log(typeof 1);//number console.log(typeof 's');//string console.log(typeof undefined);//undefined console.log(typeof true);//boolean console.log(typeof function () {});//function console.log(typeof null);//object console.log(typeof {});//object console.log(typeof []);//object instanceof: 检测一个引用数据类型属于的类,检测构造函数的 prototype 属性是否出现在某个实例对象的原型链,要注意,是检测引用数据类型,基础数据类型不能检测(引用数据类型也都是Object的子类): console.log(1

有以下 3 个判断数组的方法,请分别介绍它们之间的区别和优劣Object.prototype.toString.call() 、 instanceof 以及 Array.isArray()

大憨熊 提交于 2020-03-04 04:18:39
1. Object.prototype.toString.call() 每一个继承 Object 的对象都有 toString 方法,如果 toString 方法没有重写的话,会返回 [Object type] ,其中 type 为对象的类型。但当除了 Object 类型的对象外,其他类型直接使用 toString 方法时,会直接返回都是内容的字符串,所以我们需要使用call或者apply方法来改变toString方法的执行上下文。 const an = ['Hello','An']; an.toString(); // "Hello,An" Object.prototype.toString.call(an); // "[object Array]" 这种方法对于所有基本的数据类型都能进行判断,即使是 null 和 undefined 。 Object.prototype.toString.call('An') // "[object String]" Object.prototype.toString.call(1) // "[object Number]" Object.prototype.toString.call(Symbol(1)) // "[object Symbol]" Object.prototype.toString.call(null) // "[object

多态

早过忘川 提交于 2020-03-02 22:23:20
1、子类型转换成父类型,称为向上机制/upcasting,或者称为自动类型转换 2、java语法:父类型引用指向子类型对象 3、java程序永远都分为编译阶段和运行阶段 4、先分析编译阶段,再分析运行阶段,编译无法通过,也无法运行 5、 Animal a2=new Cat(); a2.move(); 编译阶段编译器检查a2这个引用数据类型为animal,由于animal.class字节码当中有move方法,所以编译通过,这个过程称为静态绑定,编译阶段绑定,只有静态绑定成功之后才会有后续的运行。。 在程序运行阶段,jvm堆内存当中真实创建的对象是cat对象,name在运行中移动会调用cat对象的move方法,此时发送了动态绑定,运行阶段绑定。 无论是cat类有没有重写move方法,运行阶段移动调用的是cat对象的move方法,因为底层真实对象是cat对象。 父类型引用指向子类型对象这种机制导致程序存在编译阶段绑定和运行阶段绑定两种不同的形态/状态,这种机制可以成为多态语法机制 6、 a2.catchMouse(); 不能调用,因为a2类型是animal类型,由于animal.class字节码当中没有catchMouse方法,所以编译不通过,静态绑定失败 7、以上问题怎么办? a2是无法直接调用,因为a2类型是animal类型,animal