`

Class.isAssignableFrom与 instanceof 区别

    博客分类:
  • J2SE
阅读更多
isAssignableFrom 是用来判断一个类Class1和另一个类Class2是否相同或是另一个类的超类或接口。  
  通常调用格式是  
        Class1.isAssignableFrom (Class2)  
  调用者和参数都是   java.lang.Class   类型。  
     
  而   instanceof   是用来判断一个对象实例是否是一个类或接口的或其子类子接口的实例。  
    格式是:   oo   instanceof   TypeName    
    第一个参数是对象实例名,第二个参数是具体的类名或接口名
具体例子如下:
public class TestCase {
	public static void main(String[] args) {
		TestCase test = new TestCase();
		test.testIsAssignedFrom1();
		test.testIsAssignedFrom2();
		test.testIsAssignedFrom3();
		test.testInstanceOf1();
		test.testInstanceOf2();
	}

	public void testIsAssignedFrom1() {
		System.out.println(String.class.isAssignableFrom(Object.class));
	}

	public void testIsAssignedFrom2() {
		System.out.println(Object.class.isAssignableFrom(Object.class));
	}

	public void testIsAssignedFrom3() {
		System.out.println(Object.class.isAssignableFrom(String.class));
	}

	public void testInstanceOf1() {
		String ss = "";
		System.out.println(ss instanceof Object);
	}

	public void testInstanceOf2() {
		Object o = new Object();
		System.out.println(o instanceof Object);
	}

}


打印结果:
false
true
true
true
true
分享到:
评论

相关推荐

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

    isAssignableFrom

    if (animals.getClass().getComponentType().isAssignableFrom(Dog.class)) { // 可以安全地添加Dog对象到animals } ``` 3. **反射操作**:在使用反射API时,`isAssignableFrom`可以帮助我们检查类或接口的关系...

    Java对象类型的判断详解

    System.out.println(B.class.isAssignableFrom(A.class)); // 输出:false System.out.println(B.class.isAssignableFrom(B.class)); // 输出:true System.out.println(B.class.isAssignableFrom(C.class)); // ...

    判断类的缓存大小

    System.out.println(String.class.isAssignableFrom(Object.class)); // 输出 false System.out.println(Object.class.isAssignableFrom(String.class)); // 输出 true ``` 第一行代码表示`String`类不能被赋予`...

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

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

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

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

    Damaer#Coding#instanceof用法详解1

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

    Java反射案例

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

    传递参数SendArgs

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

    扫描接口实现类

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

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

    * 检查类是否是某个类或接口的实例:`clazz.isAssignableFrom(otherClazz)`。 * 获取类的超类:`clazz.getSuperclass()`。 * 获取接口:`clazz.getInterfaces()`。 * 获取构造器:`clazz.getConstructors()` 和 ...

    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是反射的一...

    反射简单示例

    if (String.class.isAssignableFrom(clazz)) { System.out.println("Class is a string-like."); } ``` ### 泛型信息 虽然Java的泛型在编译后会被擦除,但反射仍然提供了一些方式来获取泛型信息,比如`...

    反射取继承子类.rar

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

    Java 获取泛型的类型实例详解

    if (ParameterizedType.class.isAssignableFrom(t.getClass())) { for (Type t1 : ((ParameterizedType) t).getActualTypeArguments()) { System.out.print(t1 + ","); } System.out.println(); } } / * ...

    java 深度拷贝 复制 深度复制.zip

    5. 检查字段是否为引用类型,如果是,则进行深度拷贝:`if (field.getType().isAssignableFrom(Class.forName("java.lang.Object"))) { ... }` 6. 将原始对象的字段值复制到新对象:`field.set(copy, deepCopy(field...

    反射的使用

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

    java反射深入剖析(推荐)

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

Global site tag (gtag.js) - Google Analytics