`
sunnylocus
  • 浏览: 875655 次
  • 性别: Icon_minigender_1
  • 来自: 美国图森
社区版块
存档分类
最新评论

Class.isAssignableFrom(Class clz)方法 与 instanceof 关键字的区别

    博客分类:
  • Java
阅读更多

原地址:http://topic.csdn.net/t/20050127/15/3758173.html

我略作了下修改

Class.isAssignableFrom()是用来判断一个类Class1和另一个类Class2是否相同或是另一个类的子类或接口。  
格式为:
        Class1.isAssignableFrom(Class2)  
  调用者和参数都是java.lang.Class类型。   
  而instanceof是用来判断一个对象实例是否是一个类或接口的或其子类子接口的实例。  
  格式是:o instanceof TypeName     
  第一个参数是对象实例名,第二个参数是具体的类名或接口名,例如   String,InputStream。

package com.bill99.pattern;

public class AssignableTest {
	
	public AssignableTest(String name) {
	}
	/**
	 * 判断一个类是否是另一个类的父类
	 * 是打印true
	 * 否打印false
	 */
	public static void testIsAssignedFrom1() {
		System.out.println("String是Object的父类:"+String.class.isAssignableFrom(Object.class));
	}
	/**
	 * 判断一个类是否是另一个类的父类
	 * 是打印true
	 * 否打印false
	 */
	public static void testIsAssignedFrom2() {
		System.out.println("Object是String的父类:"+Object.class.isAssignableFrom(String.class));
	}
	/**
	 * 判断一个类是否和另一个类相同
	 * 是打印true
	 * 否打印false
	 */
	public static void testIsAssignedFrom3() {
		System.out.println("Object和Object相同:"+Object.class.isAssignableFrom(Object.class));
	}

	/**
	 * 判断str是否是Object类的实例
	 * 是打印true
	 * 否打印false
	 */
	public static void testInstanceOf1() {
		String str = new String();
		System.out.print("str是Object的实例:");
		System.out.println(str instanceof Object);
	}
	/**
	 * 判断o是否是Object类的实例
	 * 是打印true
	 * 否打印false
	 */
	public static void testInstanceOf2() {
		Object o = new Object();
		System.out.print("o是Object的实例:");
		System.out.println(o instanceof Object);
	}
	
	public static void main(String[] args) {
		testIsAssignedFrom1();
		testIsAssignedFrom2();
		testIsAssignedFrom3();
		testInstanceOf1();
		testInstanceOf2();
	}
}

 结果:

String是Object的父类:false
Object是String的父类:true
Object和Object相同:true
str是Object的实例:true
o是Object的实例:true

分享到:
评论
7 楼 jnjeC 2019-02-26  
jake_12345 写道
大哥,这写错了吧
Class.isAssignableFrom()是用来判断一个类Class1和另一个类Class2是否相同或是另一个类的超类或接口。

Determines if the class or interface represented by this Class object is either the same as, or is a superclass or superinterface of, the class or interface represented by the specified Class parameter.
源码注释就是楼主说的这样的意思,应该没错。理解这个方法名称的时候要将方法参数作为主语。
例如        System.out.println("String是Object的父类:"+String.class.isAssignableFrom(Object.class)); 
可以用中文来表达:
Object.class isAssignableFrom String.class.
Object.class 是不是从String.class 分配 。
6 楼 qq412796770 2018-01-04  
大哥,百度第一条就是你的,好歹也修改一下吧  
5 楼 技术无涯苦作舟 2017-09-19  
大哥,百度第一条就是你的,好歹也修改一下吧
4 楼 lgh1992314 2017-08-16  
大哥,百度第一条就是你的,好歹也修改一下吧
3 楼 Alex_Cin 2017-04-05  
大哥,百度第一条就是你的,好歹也修改一下吧
2 楼 xiaomabobo 2016-10-11  
大哥,百度第一条就是你的,好歹也修改一下吧
1 楼 jake_12345 2016-03-15  
大哥,这写错了吧
Class.isAssignableFrom()是用来判断一个类Class1和另一个类Class2是否相同或是另一个类的超类或接口。

相关推荐

    Java中isAssignableFrom的用法详解

    System.out.println(A.class.isAssignableFrom(a.getClass())); // true,因为 a 是 A 类型 System.out.println(B.class.isAssignableFrom(b.getClass())); // true,因为 b 是 B 类型 System.out.println(A....

    Damaer#Coding#instanceof用法详解1

    1. instanceof关键字 2. isInstance()方法 3. instanceof,isInstance,isAssignableFrom区别是什

    Java对象类型的判断详解

    `isInstance()` 方法与 `instanceof` 关键字的行为类似,它也能检查一个对象是否是给定类的实例或其子类的实例。如下所示: ```java class A {} class B extends A {} class C extends B {} B b = new B(); System...

    isAssignableFrom

    这个方法属于java.lang.Class类,用于判断一个类是否可以被赋值给另一个类或者接口。也就是说,如果A类是B类的父类(或者A接口是B接口的扩展),那么Class对象表示A的`isAssignableFrom`方法调用表示B的Class对象时...

    判断类的缓存大小

    本文将深入探讨如何通过Java内置的关键字`instanceof`以及类方法`isInstance(Object obj)`和`isAssignableFrom(Class<?> cls)`来判断类的缓存大小及其相关知识点。 #### `instanceof`关键字 `instanceof`关键字...

    C#中实现判断某个类是否实现了某个接口

    有时我们需要判断某个类是否实现了某个接口...从字面意思可以看出,IsAssignableFrom表示BarClass类型能否赋值给IFoo接口,所以它返回true的条件就是BarClass直接或间接实现了IFoo接口。Type类型中还有一个方法是IsSu

    SonarQube检测出的bug、漏洞以及异味的修复整理

    比较类时,应避免依赖类名,而应使用`instanceof`或`Class.isAssignableFrom()`方法,以确保类型安全。 9. **Prevent int promotion with & 0xff**: 当处理字节时,使用`& 0xff`确保不会发生意外的整数提升。这...

    Java反射案例

    通过`Class.forName()`方法或`类名.class`可以获取到Class对象。一旦有了Class对象,就可以获取类的元信息,如类名、包名、父类、接口、修饰符等。 2. **创建对象**: 通过反射,我们可以在运行时动态创建对象。...

    反射简单示例

    3. 类的`class`关键字,例如`Class<?> clazz = String.class;` 一旦我们有了`Class`对象,就可以进行以下操作: ### 创建对象 使用`newInstance()`方法可以创建类的实例,但前提是没有参数的构造器。例如: ```...

    扫描接口实现类

    结合`URL`和`File`,我们可以遍历JAR文件和目录,查找包含类文件的`.class`资源。 5. **反射**:Java反射API允许我们在运行时检查类、接口、字段和方法的信息。`Class<?> clazz = Class.forName(className);`之后,...

    java判断class子类或父类的实例方法

    在 Java 中,每个类都有一个对应的 Class 对象,我们可以通过 getClass() 方法或使用 .class 语法来获取一个类的 Class 对象。 判断一个类是否为基本数据类型可以使用 Class 对象的 isPrimitive() 方法,该方法返回...

    传递参数SendArgs

    } else if (clazz.isAssignableFrom(Serializable.class)) { return (T) bundle.getSerializable(key); } else { // 其他基本类型 return (T) bundle.getString(key); } } return null; } public void ...

    java反射经典实例

    if (classObj.isAssignableFrom(InterfaceClass.class)) { // 类实现了接口 } ``` - 获取注解: ```java Annotation annotation = classObj.getAnnotation(MyAnnotation.class); ``` 6. **异常处理** - ...

    Java Reflection(JAVA反射)详解

    if (clazz.isAssignableFrom(MyInterface.class)) { // 类或其父类实现了MyInterface接口 } ``` 在实际应用中,Java反射常用于框架、插件系统、序列化、元数据处理、动态代理和单元测试等领域。JavaBean是反射的一...

    java反射-适合Java开发者学习

    .out.println(clazz == stringClass); // 输出 true不同的类:Class clazz1 = Class.forName("java.lang.String");Class clazz2 = Class.forName("java.lang.Integer");System.out.println(clazz1 == clazz2); // ...

    反射取继承子类.rar

    在Java中,`java.lang.Class`类是反射的核心,它代表了运行时的类信息。通过类的对象,我们可以获取类的名字、构造器、方法、字段等信息。例如,我们可以通过`Class.forName("全限定类名")`来获取一个类的`Class`...

    java反射深入剖析(推荐)

    Constructor<Person> constructor = demo.getConstructor(String.class, int.class); Person person = constructor.newInstance("John", 30); ``` 反射还提供了以下功能: 1. 访问和修改字段:`Field`类代表类的...

    反射的核心代码

    3. 类的`class`关键字,例如`Class<?> clazz = String.class;`。 获取到`Class`对象后,我们可以进行以下操作: 1. **创建对象**:通过`newInstance()`方法,但前提类必须有一个无参构造器。例如,`Object obj = ...

    反射的使用

    在Java中,反射机制主要通过java.lang.Class类、java.lang.reflect包中的类(如Constructor、Method、Field)来实现。本文将深入探讨Java反射的基本概念、用途、优缺点以及如何使用。 一、什么是Java反射 Java反射...

Global site tag (gtag.js) - Google Analytics