gpt4 book ai didi

java - 为什么 `Class` 类是最终类?

转载 作者:搜寻专家 更新时间:2023-10-31 20:02:14 25 4
gpt4 key购买 nike

在 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 ...
}

我知道这段代码不起作用,因为 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;

}

但缺乏透明装饰的美感。

最佳答案

根据Class类中的注释只有Java虚拟机创建Class 对象。

如果您被允许扩展类,那么就会出现一个问题,您是否应该被允许创建自定义类对象?。如果是,那么它将打破上述只有 JVM 应该创建类对象的规则。因此,您没有这种灵 active 。

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

关于java - 为什么 `Class` 类是最终类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24995566/

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