3

免责声明:这是一个作为智力练习的问题,因此我不想在这里使用 Enum。

参考我之前的问题: Java:延迟加载Singleton和反射攻击?

以下是我提出的防止 IODH 惯用语反射攻击的解决方案。你能请。评论解决方案并提出其他方法?(我知道“许可”方法:https ://stackoverflow.com/a/8112238/266103 )

同样,这段代码严格来说是一种智力练习,我永远不会在现实生活中使用这样的东西

另外 1) 此代码创建两个实例,但如果实例是通过构造函数反射而不是调用创建的,则保留第二个实例,getInstance()并且 2) 它不太可能是线程安全的。

public class Singleton 
{
    private volatile static boolean isCreated = false;

    private static class Holder
    {
        private static Singleton instance = new Singleton();
    }

    private Singleton()
    {               
        if(isCreated)
        {
            throw new RuntimeException("Singleton Multiple Instantiation");
        }       
        Holder.instance = this;
        isCreated = true;
    }

    public static Singleton getInstance()
    {
        return Holder.instance;
    }
}
4

0 回答 0