小编mar*_*son的帖子

不同的默认'initialCapacity'HashSet和LinkedHashSet

从集合构造a HashSet和a时LinkedHashSet,initialCapacity在默认实现中将其设置为不同的值.

HashSet的:

public HashSet(Collection<? extends E> c) {
    map = new HashMap<>(Math.max((int) (c.size()/.75f) + 1, 16));
    addAll(c);
}
Run Code Online (Sandbox Code Playgroud)

LinkedHashSet:

public LinkedHashSet(Collection<? extends E> c) {
    super(Math.max(2*c.size(), 11), .75f, true);
    addAll(c);
}
Run Code Online (Sandbox Code Playgroud)

我确信这有一个完全正确的理由,但我没有看到它.

java

9
推荐指数
1
解决办法
569
查看次数

使用 JDK 17 的 Javassist

从 JDK 11 升级到 17 后,Javassist(版本 3.28.0-GA)停止工作。

调用CtClass#toClass会出现以下错误:

  ...
  Caused by: java.lang.reflect.InaccessibleObjectException: Unable to make protected final java.lang.Class java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int,java.security.ProtectionDomain) throws java.lang.ClassFormatError accessible: module java.base does not "opens java.lang" to unnamed module @63e31ee
at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:354)
at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:297)
at java.base/java.lang.reflect.Method.checkCanSetAccessible(Method.java:199)
at java.base/java.lang.reflect.Method.setAccessible(Method.java:193)
at javassist.util.proxy.SecurityActions.setAccessible(SecurityActions.java:159)
at javassist.util.proxy.DefineClassHelper$JavaOther.defineClass(DefineClassHelper.java:213)
at javassist.util.proxy.DefineClassHelper$Java11.defineClass(DefineClassHelper.java:52)
at javassist.util.proxy.DefineClassHelper.toClass(DefineClassHelper.java:260)
at javassist.ClassPool.toClass(ClassPool.java:1240)
at javassist.CtClass.toClass(CtClass.java:1392)
Run Code Online (Sandbox Code Playgroud)

有人知道解决方法吗?

java javassist java-17

4
推荐指数
1
解决办法
3129
查看次数

标签 统计

java ×2

java-17 ×1

javassist ×1