|
@@ -16,10 +16,9 @@
|
|
|
*/
|
|
|
package com.baomidou.mybatisplus.core.toolkit.support;
|
|
|
|
|
|
+import com.baomidou.mybatisplus.core.toolkit.ClassUtils;
|
|
|
import com.baomidou.mybatisplus.core.toolkit.ExceptionUtils;
|
|
|
import com.baomidou.mybatisplus.core.toolkit.SerializationUtils;
|
|
|
-import com.baomidou.mybatisplus.core.toolkit.StringPool;
|
|
|
-import lombok.Getter;
|
|
|
|
|
|
import java.io.*;
|
|
|
|
|
@@ -32,10 +31,11 @@ import java.io.*;
|
|
|
* @author HCL
|
|
|
* @since 2018/05/10
|
|
|
*/
|
|
|
-@Getter
|
|
|
+@SuppressWarnings("unused")
|
|
|
public class SerializedLambda implements Serializable {
|
|
|
|
|
|
private static final long serialVersionUID = 8025925345765570181L;
|
|
|
+
|
|
|
private Class<?> capturingClass;
|
|
|
private String functionalInterfaceClass;
|
|
|
private String functionalInterfaceMethodName;
|
|
@@ -53,9 +53,8 @@ public class SerializedLambda implements Serializable {
|
|
|
* @param lambda lambda对象
|
|
|
* @return 返回解析后的 SerializedLambda
|
|
|
*/
|
|
|
- public static SerializedLambda convert(Property lambda) {
|
|
|
- byte[] bytes = SerializationUtils.serialize(lambda);
|
|
|
- try (ObjectInputStream objIn = new ObjectInputStream(new ByteArrayInputStream(bytes)) {
|
|
|
+ public static SerializedLambda resolve(Property lambda) {
|
|
|
+ try (ObjectInputStream objIn = new ObjectInputStream(new ByteArrayInputStream(SerializationUtils.serialize(lambda))) {
|
|
|
@Override
|
|
|
protected Class<?> resolveClass(ObjectStreamClass objectStreamClass) throws IOException, ClassNotFoundException {
|
|
|
Class<?> clazz = super.resolveClass(objectStreamClass);
|
|
@@ -68,10 +67,59 @@ public class SerializedLambda implements Serializable {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 获取接口 class
|
|
|
+ *
|
|
|
+ * @return 返回 class 名称
|
|
|
+ */
|
|
|
+ public String getFunctionalInterfaceClassName() {
|
|
|
+ return normalName(functionalInterfaceClass);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取实现的 class
|
|
|
+ *
|
|
|
+ * @return 实现类
|
|
|
+ */
|
|
|
+ public Class getImplClass() {
|
|
|
+ return ClassUtils.toClassConfident(getImplClassName());
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取 class 的名称
|
|
|
+ *
|
|
|
+ * @return 类名
|
|
|
+ */
|
|
|
+ public String getImplClassName() {
|
|
|
+ return normalName(implClass);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取实现者的方法名称
|
|
|
+ *
|
|
|
+ * @return 方法名称
|
|
|
+ */
|
|
|
+ public String getImplMethodName() {
|
|
|
+ return implMethodName;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 正常化类名称,将类名称中的 / 替换为 .
|
|
|
+ *
|
|
|
+ * @param name 名称
|
|
|
+ * @return 正常的类名
|
|
|
+ */
|
|
|
+ private String normalName(String name) {
|
|
|
+ return name.replace('/', '.');
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @return 字符串形式
|
|
|
+ */
|
|
|
@Override
|
|
|
public String toString() {
|
|
|
- return super.toString() +
|
|
|
- implClass.replace(StringPool.SLASH, StringPool.DOT) +
|
|
|
- StringPool.HASH + implMethodName;
|
|
|
+ return String.format("%s -> %s::%s", getFunctionalInterfaceClassName(), getImplClass().getSimpleName(),
|
|
|
+ implMethodName);
|
|
|
}
|
|
|
+
|
|
|
}
|