Java8 函数式编程
方法接口
只有一个抽象方法的接口。方法接口存在的目的就是为了传递一个方法,例如
@FunctionalInterface
public interface Runnable {
public abstract void run();
}
Java8后增加了注解@FunctionalInterface来指明一个接口是方法接口
实现方法接口的抽象方法
传统方法
定义子类
public class MyRunnable implements Runnable {
@Override
public void run() {
System.out.println("hello");
}
}
使用匿名内部类
Runn...
前端表单验证
JavaScript原生验证
<form>元素没有定义novalidate属性,且<input>元素通过一些验证有关的属性开启验证,例如定义required,max,min等属性,表单提交的时候默认自动验证。除此之外可以通过以下JS代码主动触发验证
document.getElementById('form').checkValidity()
jQuery Validation
引入jQuery Validation
<script src="../common/jQuery-3.4.1/jquery-3.4.1.min.js" th:src="@{/static/common/jQuery-3.4.1/jquery-3.4.1.min.js}...
SQL中delete和truncate
作用
都可以用于删除一张数据表的全部数据
-- 删除表a的全部数据
delete from a;
truncate table a;
区别
delete属于DML,而truncate属于DDL
truncate只能用于表,而delete可以用于表、视图等
delete可以加where子句限制条件,truncate不能
delete支持事务,truncate不支持
truncate删除效率比delete高
总结
一般来说,只有删除整张表的数据,表的数据量大,且无需考虑撤回的情况下,可以考虑使用truncate以提升性能
Java自定义注解
定义注解
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Repeatable(ShowMessage.ShowMessages.class)
public @interface ShowMessage {
String message() default "hello";
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@interface ShowMessages {
ShowMes...
Java枚举类
枚举类解决的问题
解决使用常量存在的两个问题
无法检查值是否在合法范围内
常量是其它类型,例如int或String,无法检查是否超出了使用范围,即当作一个普通的int或String使用
语法糖的实质
定义一个枚举类
public enum Color {
RED, GREEN, BLUE;
}
实际编译后
public final class Color extends Enum {
public static final Color RED = new Color();
public static final Color GREEN = new Color();
public static final Color BLUE =...
Java8 CompletableFuture使用
准备Executor
这里以ThreadPoolExecutor为例
ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(5, 5, 1,
TimeUnit.SECONDS, new ArrayBlockingQueue<>(10),
Executors.defaultThreadFactory(),
new ThreadPoolExecutor.CallerRunsPolicy());
异步执行任务
执行无返回值任务
CompletableFuture.runAsync(() -> System.out.println("a"), threadPoolExe...
Java8函数式接口
通用的函数式接口
Function
接收T类型,返回R类型
public interface Function<T, R> {
R apply(T t);
}
Supplier
不接收,返回T类型
public interface Supplier<T> {
T get();
}
Consumer
接收T类型,不返回
public interface Consumer<T> {
void accept(T t);
}
Predicate
接收T类型,返回boolean
public interface Predicate<T> {
boolean test(T t);
}
...
Java容器LinkedList源码完整注释
本文源码基于JDK8
LinkedList类继承关系
Iterator接口
public interface Iterator<E> {
// 检测是否还有下一个元素
boolean hasNext();
// 返回下一个元素
E next();
// 将上一次next方法返回的元素删除
default void remove() {
// 抛出异常
throw new UnsupportedOperationException("remove");
}
// 对剩余的所有元素调用Consumer
default void forEachRemaining...
332 post articles, 34 pages.