gpt4 book ai didi

java - Java 中的泛型单例

转载 作者:行者123 更新时间:2023-11-30 06:52:14 25 4
gpt4 key购买 nike

为什么以下代码会抛出 java.lang.InstantiationException: generics.SingletonFoo$A

public class SingletonFoo {
private static Object _tn;

public static <T> T instance(Class<T> t) {
if (_tn != null) {
return (T) _tn;
}
try {
_tn = t.newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return (T) _tn;
}


private class A{
public A() {
}
}

public static void main(String[] args) {
System.out.println(SingletonFoo.instance(A.class));
}
}

它是否以某种方式与类型删除相关并且不可能在 Java 中创建通用单例?

最佳答案

这里的 A 不是静态类。这意味着它包含对包含 SingletonFoo 的引用(隐式),这意味着您可能无法通过 newInstance 实例化它。

如果不需要是内部类,请尝试将其设为静态或将其移出类 it。

解决方案 1:使 A 成为静态成员类

private static class A{
public A() {
}
}

解决方案 2:在室外

public class SingletonFoo {
private static Object _tn;

public static <T> T instance(Class<T> t) {
if (_tn != null) {
return (T) _tn;
}
try {
_tn = t.newInstance();
;
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return (T) _tn;
}

public static void main(String[] args) {
System.out.println(SingletonFoo.instance(A.class));
}

}

class A {
public A() {
}
}

关于java - Java 中的泛型单例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39306508/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com