kotlin

设计模式:简单的观察者模式实现(java&kotlin)

和自甴很熟 提交于 2020-08-10 02:31:03
观察者模式 观察者模式定义了一个一对多的依赖关系,让一个或多个观察者对象监听一个主题对象。这样一来,当被观察者状态发生改变时,需要通知相应的观察者,使这些观察者对象能够自动更新。 观察这模式是应用比较多的一种设计模式,尤其在响应式编程中。 观察者模式又称发布-订阅模式(Publish/Subscribe),这种称呼就比较好理解了,就好像我们在bilibili上订阅了一个up主,一旦他发布了视频,就会有消息通知订阅者,up主就是发布者(观察者publisher),用publisher户就是订阅者(观察者observer) java实现 下面我们实现一个例子,模拟up更新视频就会通知订阅者的功能 import java . util . * ; // 模拟up更新视频就会通知订阅者 class VideoUpdate extends Observable { private List < User > observers = new ArrayList < > ( ) ; // 存储订阅者 // 添加dingyuezhe void addOberver ( User user ) { this . observers . add ( user ) ; } // 移除订阅者 void deleteObserver ( User user ) { this . observers .

kotlin ViewPager + TabLayout + Fragment(优雅的实现懒加载主界面)

假如想象 提交于 2020-08-09 22:46:23
转载请标明出处: https://blog.csdn.net/YuGuo_TianQing/article/details/107390475 本文出自 YuGuo_TianQing的博客 时隔几年,再次捡起kotlin。这篇博客的内容主要讲解使用kotlin实现AndroidX下的ViewPager和 material中的Tablayout组合使用(ViewPager + TabLayout)。为了更完美的实现,以及实战中的功能,在实现的过程中也会遇到一些细节的代码处理。所以会设计到一些其它的内容。 该知识点是以实际项目中的使用来处理。(除了加载功能,暂用swiperefreshlayout,不然讲解的功能点会偏多,也不是这篇博客的主题) 主要实现点: 1、Fragment懒加载的基类封装 2、FragmentPagerAdapter的封装,该类设计到了缓存,优雅的去处理它(不处理的话,在一些情况下会出现bug,比如:被系统回收了,再自动创建就会出现问题)。 3、Tab 的自定义(菜单栏) 4、ViewPager的再次封装(是否能滑动换页、是否平滑过度) 5、ViewPager + TabLayout的使用 准备工作: TabLayout的使用需要依赖谷歌的包: implementation ‘com.google.android.material:material:1.1.0’

阿里P8教你如何学习JVM

落爺英雄遲暮 提交于 2020-08-09 20:33:36
前言 提到Java虚拟机(JVM),可能大部分人的第一印象是“难”,但当让我们真正走入“JVM世界”的时候,会发现其实问题并不像我们想象中的那么复杂。唯一真正令我们恐惧的,其实是恐惧本身。 为了帮助大家更好的学习JVM,小编送给大家一本PDF书籍,详见下文啦~ 一、什么是JVM? JVM简介: JVM是Java Virtual Machine的缩写,中文翻译为Java虚拟机,是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。简单来说JVM是用来解析和运行Java程序的。 Java有一个非常重要的特点“平台的无关性”,就是使用JVM实现的。Java语言只需要生成Jvm上运行的目标代码(字节码),就可以在多种平台上不加修改地运行,因为JVM本身屏蔽了与具体平台相关的信息,使得Java能够“一次编译,到处运行”。 二、为什么要学习JVM? 学习JVM无外乎以下几个原因: 1、 程序调优 不同的程序(业务场景)需要不同的Jvm配置,比如设置不同的垃圾收集器、设置新生代和老生带的内存配置和占比等,不同的配置对于程序的运行有着千差万别的影响。而Jvm默认的配置只能保证程序能够“运行”,而想要“很好的运行”甚至是“更好的运行”,就是学习Jvm最主要的因素之一。 2、 排查程序运行问题 有些程序可能在线上使用的时候会遇到各种各样的问题

npm WARN saveError ENOENT: no such file or directory解决

假装没事ソ 提交于 2020-08-09 20:21:08
安装完成node.js后使用npm安装vue报错如下: C:\Users\lxz>npm uninstall vueWcsp npm WARN saveError ENOENT: no such file or directory, open 'C:\Users\lxz\package.json' npm WARN enoent ENOENT: no such file or directory, open 'C:\Users\lxz\package.json' npm WARN lxz No description npm WARN lxz No repository field. npm WARN lxz No README data npm WARN lxz No license field. up to date in 0.765s 根据错误提示,是系统没有‘package.json’这个文件导致。这个文件的作用就是管理你本地安装的npm包,一个package.json文件可以做如下事情: 展示项目所依赖的npm包 允许你指定一个包的版本[范围] 让你建立起稳定,意味着你可以更好的与其他开发者共享 此刻我们需要执行命令: npm init 然后一路回车就OK,这个文件可以后面改动 创建package.json文件,系统会提示相关配置,也可以使用命令: npm init -

GestureDetectorCompat not reacting to events

限于喜欢 提交于 2020-08-09 19:52:09
问题 In the following code, I do not get any response to touch events when I setup my GestureDetectorCompat. Could it be because I use data binding? If so, do you have any ideas why and how to get around the problem? private lateinit var mDetector: GestureDetectorCompat private fun setupDataBinding() { binding = DataBindingUtil.setContentView(this, R.layout.activity_main) binding.lifecycleOwner = this } private fun setupViewListener() { mDetector = GestureDetectorCompat(this, MyGestureListener())

软件安装:android studio安装以及操作手册

…衆ロ難τιáo~ 提交于 2020-08-09 17:59:51
Android Studio 是谷歌推出的一个Android集成开发工具,基于IntelliJ IDEA. 类似 Eclipse ADT,Android Studio 提供了集成的 Android 开发工具用于开发和调试。好的工具使用才有好的开发效率。刚好买了新电脑就把全部的安装步骤给记录下来。 android studio下载 首先我们打开链接: android studio下载链接 截至到目前为止最新版本为3.5.2,我们点击下载,得到如下安装包点击 进去安装界面。点击NEXT 进去选择界面 android studio为默认必须安装项,android virtual device可选择装或者不装,用于软件调试。我们默认安装 这里选择安装路径,建议自己新建路径,以免C盘安装过多导致C盘空间不足,确定好了安装路径后,点击next 进入安装,等待安装结束 点击next 点击finish完成安装并打开android studio 因为是第一安装,所以没有之前的配置引用直接OK 因为是新电脑没有SDK,先cancel 进去欢迎界面,这里可以配置自己喜欢的风格,我这里默认 选择UI主题,根据个人喜好来就好 点击next 点击finish,等待自动安装组件 完成安装 显示HAXM安装失败,原因是我的电脑是10家庭版本,没有Hyper-V导致,如果你们跟我一样的版本可以百度查询下配置方式

Python 为什么用 # 号作注释符?

放肆的年华 提交于 2020-08-09 17:29:10
关于编程语言中的注释,其重要性基本上已为大家所共识。 然而关于注释的规范,这个话题就像我们之前聊过的缩进、终止符和命名方式一样,众口难调。 注释符通常可分为两种,即行注释与块注释(inline/block),它们在不同的编程语言中的符号可谓让人眼花缭乱。 比如行注释符,它至少有以下的 17 种之多(出自 维基百科 ): 其中两个最大的阵营分别是“//”与“#”号: // 注释符:ActionScript, C (C99), C++, C#, D, F#, Go, Java, JavaScript, Kotlin, Object Pascal (Delphi), Objective-C, PHP, Rust, Scala, SASS, Swift, Xojo # 注释符:Bourne shell and other UNIX shells, Cobra, Perl, Python, Ruby, Seed7, Windows PowerShell, PHP, R, Make, Maple, Elixir, Nim 那么,**Python 为什么用“#”号作注释符,而不是“//”呢? ** 这个问题恐怕没办法从解析的效率、符号的辨识度和输入的便利性等方面回答,因为它们基本上没有区别。 我没有找到官方的解释,但是从这些注释符的阵营中,已经不难得出一个较为合理的解释: // 注释符基本上被

Using multiple path in @ComponentScan is not working

爱⌒轻易说出口 提交于 2020-08-09 12:31:49
问题 I'm having a problem using multiple path in component scan. I tried the solution from here How to scan multiple paths using the @ComponentScan annotation? but it gives me error: @ComponentScan({"com.tx.loader", "com.tx.common"}) @SpringBootApplication It says Unexpected tokens (Use ';' to separate expressions on the same line) I'm using Kotlin and Intellij IDE. 回答1: Hey in Kotlin I found @ComponentScan to be a bit tricky. Here is how I used it, hopefully it matches your case: @ComponentScan(

Using multiple path in @ComponentScan is not working

眉间皱痕 提交于 2020-08-09 12:31:21
问题 I'm having a problem using multiple path in component scan. I tried the solution from here How to scan multiple paths using the @ComponentScan annotation? but it gives me error: @ComponentScan({"com.tx.loader", "com.tx.common"}) @SpringBootApplication It says Unexpected tokens (Use ';' to separate expressions on the same line) I'm using Kotlin and Intellij IDE. 回答1: Hey in Kotlin I found @ComponentScan to be a bit tricky. Here is how I used it, hopefully it matches your case: @ComponentScan(

Python 为什么用 # 号作注释符?

依然范特西╮ 提交于 2020-08-09 10:38:19
云栖号资讯:【 点击查看更多行业资讯 】 在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 关于编程语言中的注释,其重要性基本上已为大家所共识。 然而关于注释的规范,这个话题就像我们之前聊过的缩进、终止符和命名方式一样,众口难调。 注释符通常可分为两种,即行注释与块注释(inline/block),它们在不同的编程语言中的符号可谓让人眼花缭乱。 比如行注释符,它至少有以下的 17 种之多(出自维基百科): 其中两个最大的阵营分别是“//”与“#”号: // 注释符:ActionScript, C (C99), C++, C#, D, F#, Go, Java, JavaScript, Kotlin, Object Pascal (Delphi), Objective-C, PHP, Rust, Scala, SASS, Swift, Xojo 注释符:Bourne shell and other UNIX shells, Cobra, Perl, Python, Ruby, Seed7, Windows PowerShell, PHP, R, Make, Maple, Elixir, Nim 那么, Python 为什么用“#”号作注释符,而不是“//”呢? 这个问题恐怕没办法从解析的效率、符号的辨识度和输入的便利性等方面回答,因为它们基本上没有区别。