为什么`Class`课程最终?

Pab*_*lgo 5 java security reflection decorator

在SO处回答了一个问题,我找到了一个解决方案,如果有可能扩展Class类,那将是很好的:

这个解决方案包括尝试修饰Class类,以便只允许包含某些值,在本例中,是扩展具体类的类C.

public class CextenderClass extends Class
{
    public CextenderClass (Class c) throws Exception
    {
        if(!C.class.isAssignableFrom(c)) //Check whether is `C` sub-class
            throw new Exception("The given class is not extending C");
        value = c;
    }

    private Class value;

    ... Here, methods delegation ...
}
Run Code Online (Sandbox Code Playgroud)

我知道这段代码不是Class最终的,我想知道为什么Class是最终的.我知道它必须与安全有关,但我无法想象延伸Class是危险的情况.你能举一些例子吗?

顺便说一下,我能达到的理想行为的更接近的解决方案是:

public class CextenderClass
{
    public CextenderClass(Class c) throws Exception
    {
        if(!C.class.isAssignableFrom(c)) //Check whether is `C` sub-class
            throw new Exception("The given class is not extending C");
        value = c;
    }

    public Class getValue() {
        return value;
    }

    private Class value;

}
Run Code Online (Sandbox Code Playgroud)

但它缺乏透明装饰的美感.

The*_*ind 5

根据Class类中的注释,只有Java虚拟机才能创建Class对象..

如果允许扩展类,那么如果允许您创建自定义Class对象,则会出现问题.如果是,那么它将破坏上述规则,即只有JVM才能创建类对象.所以,你没有给予这种灵活性.

PS:getClass()只返回已经创建的类对象.它不会返回新的类对象.