随笔分类 - java
摘要:一、相同点 1、get和join都是用来等待获取CompletableFuture执行异步的返回 二、不同点 1、join()方法抛出的是uncheckException异常(即RuntimeException),不会强制开发者抛出 /** * Returns the result value wh
阅读全文
摘要:一、非对称所以调用的参数和返回值可以是不同的类型 例如:我们创建一个调用的yield参数返回值 // 模板的参数是P,返回值是R // yield对应的传入参数是R,返回值是P interface CoroutineScope<P, R> { val parameter: P? suspend fu
阅读全文
摘要:一、要实现python的generator功能,首先要看下该generator是怎样的调用,如下的调用示例: fun testGenerator() { val generator = generator<Int> { println("generator $it") yield(10) yield
阅读全文
摘要:kotlin中的逆变和协变跟java中的逆变和协变是类似的 如下是kotlin跟java的应对关系 从上面可以看出:模板中out T 需要T或者T的子类,in T则需要T或者T的父类;规则跟java是一样的 java和kotlin的不同点 1、Kotlin是声明处协变;而在Java中是在使用处协变
阅读全文
摘要:一、协变和逆变的概念 协变:模板中赋值给A的是A或者A的子类。比如:List<? extends A> listA = List<ChildA>() 即:ChildA 可能是A或者A的子类 逆变:模板中赋值给A的是A或者A的父类。比如:List<? super A> listA = List<Par
阅读全文
摘要:一、一个函数防止多线程重入的方法可以使用排他锁 这里有个bank函数,和对应的调用函数 class Bank { private final double[] accounts; private ReentrantLock bankLock = new ReentrantLock(); public
阅读全文
摘要:import kotlinx.coroutines.* import java.net.URL suspend fun fetchResponse(code: Int, delay: Int) = coroutineScope { val deferred: Deferred<String?> =
阅读全文
摘要:关于协程的父子关系,从如下一段代码的运行结果来分析 import kotlinx.coroutines.* import java.net.URL suspend fun fetchResponse(code: Int, delay: Int) = coroutineScope { try { va
阅读全文
摘要:一、关于协程库的导入 1、使用下载包的方式 可以到该网站下载https://mvnrepository.com/artifact/org.jetbrains.kotlinx/kotlinx-coroutines-core对应的协程库 本地调试运行可以使用类似命令:kotlinc -classpath
阅读全文
摘要:一、关于运算符的重载 kotlin的运算符重载和c++的运算符重载比较类似,使用operator的方式: operator fun xxx的方式 比如重载类Complex的乘号 data class Complex(val real: Int, val imaginary: Int) { opera
阅读全文
摘要:一、内部的迭代函数 filter(e -> 返回true和false) 判断数值是否加入新的数组map(e -> 返回调整e之后的值) 对数组中每个数进行调整,并存入新的数组reduce(total, e -> 返回新的total) total是统计结果,e是当前遍历到参数;返回新的total作为数
阅读全文
摘要:一、lambda表达式的语法 {parameter list -> body} kotlin和java的lambda表达式的语法存在一定程度的差异: 1、kotlin在通常的情况下不允许有return语句,而java则可以有零个或者多个return语句 2、kotlin有隐式的参数it:fun is
阅读全文
摘要:我们经常使用的其实是继承,但是相对于继承使用委托的耦合性会更低。 使用继承则代码相对会比较简单,但是使用委托则会比较复杂 一、假设有interface Worker、class JavaProgrammer: Worker、class CShapeProgrammer: Worker三个类;然后新增
阅读全文
摘要:一、前提 1、如下图是组件的继承关系 可以看到所有的组件都继承Component 2、绘制函数 界面显示或者窗口大小改变的时候,都会调用protected void paintComponent(Graphics graphics)函数进行绘制对应的每个组件,并且参数只有一个是Graphics 3、
阅读全文
摘要:一、集合与数组的转换 1、初始化一个固定大小的List :List<Integer> ali = Arrays.asList(1,2,3,4,5); 该ali内容可以修改,但是大小不可变 如果要创建一个可变大小的List的话则可以如此表示:List<Integer> li = new ArrayLi
阅读全文
摘要:一、需要通配符的原因 假设类Manager继承Employee,并且有如下的范型Pair类 class Pair<T> { private T first; private T second; public Pair() { first = null; second = null; } public
阅读全文
摘要:一、范型代码的格式 可以是范型类也可以范型方法 1、范型类 class ClassName<T, ....> { ......ClassName的属性和方法 } 如上跟普通的类相比,增加了<T, ....> 如下是一个简单的Pair的例子,增加了T的类型,则Pair的first和second可以是创
阅读全文
摘要:一、内部类的说明 1、在类的内部再构建一个类,则类内部构建的这个累即为内部类 2、内部类可以访问外部类的private属性和方法 class TalkingClock { private int interval; private boolean beep; public TalkingClock(
阅读全文
摘要:一、lambda表达式的语法 假设要计算first.length() - second.length且传入的参数是first和second,那么我们的lambda表达式可以这么写 1、(String first, String second) -> {return first.length() -
阅读全文