java - Class#isAssignableFrom 带有 Object 和 double

标签 java reflection

我正在看java.lang.Class#isAssignableFrom来自Java Reflection in Action .

为什么 Object.class.isAssignableFrom(double.class): 打印为 false,但 f 打印为 100.0

public class IsAssignableFrom {
    public static void main(String[] args) {
        double d = 100;
        Object o = null;

        System.out.println("Object.class.isAssignableFrom(double.class): " + 
            Object.class.isAssignableFrom(double.class));

        Object f = d;   
        System.out.println("f: " + f);
    }
}

让我们运行测试。

>javac IsAssignableFrom.java && java -cp . IsAssignableFrom
f: 100.0
Object.class.IsAssignableFrom(d): false

最佳答案

double 是原始类型。基本类型没有共同的父类(super class)型。换句话说,Object.class 并不代表 double.class 的父类(super class)。

装箱转换可以应用于 double 类型的值,并将其转换为 Double 类型的值,该类型是 Object 的子类型。这就是 d 可以分配给 f 的原因。

关于java - Class#isAssignableFrom 带有 Object 和 double,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27390649/

相关文章:

java - 不兼容的类型 - 发现 :int required:boolean

对 Scala 案例类的反射(reflection)

java - 实例化实现接口(interface)的给定类的对象,并使用反射将其添加到 List<InterfaceX>

java - 如何应用 Java 泛型来简化这段代码

Java & 归并排序

java - Solr自定义RequestHandler ClassNotFoundException

java - 尝试获取对象表单表时,“SQL 语法有错误”

c# - System.Reflection.Assembly.GetExecutingAssembly() 总是返回 0.0.0.0

Java:从静态方法中获取被调用的类名

c# - 在不知道元素类型的情况下将项目添加到列表中