mirror of
https://github.com/CarmJos/EasyConfiguration.git
synced 2024-09-19 20:25:51 +00:00
放弃Unsafe包操作
This commit is contained in:
parent
80747ac922
commit
132ca81635
@ -31,7 +31,7 @@ public class ConfigListBuilder<V> {
|
|||||||
return from(
|
return from(
|
||||||
Object.class, ConfigDataFunction.identity(),
|
Object.class, ConfigDataFunction.identity(),
|
||||||
ConfigDataFunction.castObject(valueClass),
|
ConfigDataFunction.castObject(valueClass),
|
||||||
ConfigDataFunction.identity(), ConfigDataFunction.toObject()
|
ConfigDataFunction.toObject(), ConfigDataFunction.toObject()
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -46,7 +46,7 @@ public class ConfigValueBuilder<V> {
|
|||||||
return from(
|
return from(
|
||||||
Object.class, ConfigDataFunction.identity(),
|
Object.class, ConfigDataFunction.identity(),
|
||||||
ConfigValueParser.castObject(valueClass),
|
ConfigValueParser.castObject(valueClass),
|
||||||
ConfigDataFunction.identity(), ConfigDataFunction.toObject()
|
ConfigDataFunction.toObject(), ConfigDataFunction.toObject()
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -17,7 +17,12 @@ public interface ConfigDataFunction<T, R> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Contract(pure = true)
|
@Contract(pure = true)
|
||||||
static <T> @NotNull ConfigDataFunction<T, ? super T> identity() {
|
static <T> @NotNull ConfigDataFunction<T, T> identity() {
|
||||||
|
return (input) -> input;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Contract(pure = true)
|
||||||
|
static <T> @NotNull ConfigDataFunction<T, T> identity(Class<T> type) {
|
||||||
return (input) -> input;
|
return (input) -> input;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -33,7 +38,6 @@ public interface ConfigDataFunction<T, R> {
|
|||||||
return (input) -> input;
|
return (input) -> input;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Contract(pure = true)
|
@Contract(pure = true)
|
||||||
static <V> @NotNull ConfigDataFunction<Object, V> castObject(Class<V> valueClass) {
|
static <V> @NotNull ConfigDataFunction<Object, V> castObject(Class<V> valueClass) {
|
||||||
return (input) -> {
|
return (input) -> {
|
||||||
|
@ -1,30 +1,22 @@
|
|||||||
package config;
|
package config;
|
||||||
|
|
||||||
import config.offset.FieldOffset;
|
import config.offset.FieldOffset;
|
||||||
import config.offset.OffsetUtil;
|
|
||||||
import config.source.ComplexConfiguration;
|
|
||||||
import org.junit.Test;
|
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class OffsetTest {
|
public class OffsetTest {
|
||||||
|
|
||||||
@Test
|
// @Test
|
||||||
public void test() {
|
// public void test() {
|
||||||
|
//
|
||||||
|
// output(OffsetUtil.getClassMemberOffset(ComplexConfiguration.class));
|
||||||
List<FieldOffset> fieldOffsets = OffsetUtil.getClassMemberOffset(ComplexConfiguration.class);
|
// output(OffsetUtil.getClassMemberOffset(ComplexConfiguration.Sub.class));
|
||||||
|
//
|
||||||
output(fieldOffsets);
|
// }
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
protected static void output(List<FieldOffset> fieldOffsets) {
|
protected static void output(List<FieldOffset> fieldOffsets) {
|
||||||
for (FieldOffset fieldOffset : fieldOffsets) {
|
for (FieldOffset fieldOffset : fieldOffsets) {
|
||||||
System.out.println(fieldOffset.getOffsetValue() + " -> " + fieldOffset.getField().getName());
|
System.out.println(fieldOffset.getOffsetValue() + " -> " + fieldOffset);
|
||||||
if (!fieldOffset.getSubFieldOffsetList().isEmpty()) {
|
|
||||||
output(fieldOffset.getSubFieldOffsetList());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -36,7 +36,7 @@ public class SomeModel extends AbstractModel implements ConfigurationSerializabl
|
|||||||
|
|
||||||
@TestOnly
|
@TestOnly
|
||||||
public static SomeModel deserialize(Map<String, ?> args) {
|
public static SomeModel deserialize(Map<String, ?> args) {
|
||||||
return new SomeModel((String) args.get("name"), (int) args.get("num"));
|
return new SomeModel((String) args.get("name"), (Integer) args.get("num"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -59,4 +59,6 @@ public class FieldOffset implements Comparable<FieldOffset> {
|
|||||||
public int compareTo(@NotNull FieldOffset that) {
|
public int compareTo(@NotNull FieldOffset that) {
|
||||||
return this.offsetValue.compareTo(that.offsetValue);
|
return this.offsetValue.compareTo(that.offsetValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,11 +1,10 @@
|
|||||||
package config.offset;
|
package config.offset;
|
||||||
|
|
||||||
import jdk.internal.misc.Unsafe;
|
|
||||||
|
import sun.misc.Unsafe;
|
||||||
|
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
import java.lang.reflect.Modifier;
|
import java.lang.reflect.Modifier;
|
||||||
import java.security.AccessController;
|
|
||||||
import java.security.PrivilegedExceptionAction;
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -18,14 +17,23 @@ public class OffsetUtil {
|
|||||||
|
|
||||||
static {
|
static {
|
||||||
try {
|
try {
|
||||||
unsafe = AccessController.doPrivileged((PrivilegedExceptionAction<Unsafe>) () -> {
|
// 获取 Unsafe 内部的私有的实例化单例对象
|
||||||
Field theUnsafe = Unsafe.class.getDeclaredField("theUnsafe");
|
Field field = Unsafe.class.getDeclaredField("theUnsafe");
|
||||||
theUnsafe.setAccessible(true);
|
// 无视权限
|
||||||
return (Unsafe) theUnsafe.get(null);
|
field.setAccessible(true);
|
||||||
});
|
unsafe = (Unsafe) field.get(null);
|
||||||
} catch (Throwable e) {
|
} catch (NoSuchFieldException | IllegalAccessException e) {
|
||||||
System.err.println("Unable to load unsafe");
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
|
// try {
|
||||||
|
// unsafe = AccessController.doPrivileged((PrivilegedExceptionAction<Unsafe>) () -> {
|
||||||
|
// Field theUnsafe = Unsafe.class.getDeclaredField("theUnsafe");
|
||||||
|
// theUnsafe.setAccessible(true);
|
||||||
|
// return (Unsafe) theUnsafe.get(null);
|
||||||
|
// });
|
||||||
|
// } catch (Throwable e) {
|
||||||
|
// System.err.println("Unable to load unsafe");
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
public static List<FieldOffset> getClassMemberOffset(Class<?> beanClass) {
|
public static List<FieldOffset> getClassMemberOffset(Class<?> beanClass) {
|
||||||
|
2
pom.xml
2
pom.xml
@ -5,7 +5,7 @@
|
|||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
<java.version>8</java.version>
|
<java.version>1.8</java.version>
|
||||||
<maven.compiler.source>${java.version}</maven.compiler.source>
|
<maven.compiler.source>${java.version}</maven.compiler.source>
|
||||||
<maven.compiler.target>${java.version}</maven.compiler.target>
|
<maven.compiler.target>${java.version}</maven.compiler.target>
|
||||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||||
|
Loading…
Reference in New Issue
Block a user