`
Key_Stone
  • 浏览: 5484 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Java instanceof 与isAssignableFrom

阅读更多

Java  instanceof 与isAssignableFrom

 

代码如下:

 

先定义一个接口:

 

public interface InstanceTest {
	
	public String getString();
}

 

实现类A:

public class InstanceA implements InstanceTest {

	@Override
	public String getString() {
		return "This is implements A.";
	}

}

 

 

实现类B:

public class InstanceB implements InstanceTest {

	@Override
	public String getString() {
		return "This is implements B.";
	}

}

 

 

测试类:

/**
 * 
 * @author David John
 *
 *	instanceof 针对实例  ; isAssignableFrom 针对class对象
 *	isAssignableFrom 是用来判断一个类Class1和另一个类Class2是否相同或是另一个类的超类或接口
 *  而  instanceof 是用来判断一个对象实例是否是一个类或接口的或其子类子接口的实例。  
 *  其中instanceof是子-->父 
 *  isAssignableFrom是父-->子
 *  我们应该尽量少用instanceof 运算符,应该尽量用多态来替代它
 */
public class InstAndIAF {
	
	public static void action(InstanceTest test){
		
		if(test instanceof InstanceA){
			System.out.println("Act like InstanceA...");
		}
		
		if(test instanceof InstanceB){
			System.out.println("Act like InstanceB...");
		}
	}
	
	public static void action(InstanceA ia){
		System.out.println("Use polymorphic, Act like InstanceA...");
	}
	
	public static void action(InstanceB ib){
		System.out.println("Use polymorphic, Act like InstanceB...");
	}
	
	public static void judgeAction(InstanceTest test){
		if(test instanceof InstanceA){
			InstAndIAF.action((InstanceA)test);
		}
		
		if(test instanceof InstanceB){
			InstAndIAF.action((InstanceB)test);
		}
	}

	public static void main(String[] args) {
		

		InstanceTest test1 = new InstanceA();
		InstanceTest test2 = new InstanceB();
		
		System.out.println(test1 instanceof InstanceTest);
		System.out.println(test2 instanceof InstanceTest);
		
		System.out.println(InstanceTest.class.isAssignableFrom(InstanceA.class));
		System.out.println(InstanceTest.class.isAssignableFrom(InstanceB.class));
		
		List<String> list = new ArrayList<String>();
		System.out.println(list instanceof ArrayList);
		System.out.println(list.getClass().isAssignableFrom(List.class));
		System.out.println(List.class.isAssignableFrom(list.getClass()));
		
		InstAndIAF.action(test1);
		InstAndIAF.action(test2);
		InstAndIAF.judgeAction(test2);
		
	}

}

 

运行结果:

true
true
true
true
true
false
true
Act like InstanceA...
Act like InstanceB...
Use polymorphic, Act like InstanceB...

 

 That'all...

 

分享到:
评论

相关推荐

    Damaer#Coding#instanceof用法详解1

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

    判断类的缓存大小

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

    Java对象类型的判断详解

    本文将深入探讨Java中三种主要的判断对象类型的手段:`instanceof`、`Class.equals()`以及`Class.isInstance()`和`Class.isAssignableFrom()`。 1. `instanceof` 关键字: `instanceof` 是Java中最常用的判断对象...

    JAVA反射机制实例教程

    这里,`isAssignableFrom()`方法检查当前`Class`对象是否可以被赋值给`ClassToCheck`对象,等价于`instanceof`的功能。 总结,Java反射机制为程序提供了强大的动态能力,但同时也带来了一定的安全风险和性能影响,...

    14.类加载器1

    这里的相等是指通过`equals`方法、`isAssignableFrom`方法或`instanceof`关键字判断的结果。 ### 结论 类加载器在Java环境中起到了桥梁的作用,它们不仅负责将类加载到内存中,还确保了类的正确加载顺序和唯一性。...

    JavaSE笔试程序题(20180307)

    15. **判断子类和接口实现**:使用instanceof关键字和isAssignableFrom()方法。 16. **遍历集合**:List使用for-each循环,Set使用迭代器,Map使用entrySet()遍历键值对。 17. **日期格式化**:使用...

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

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

    传递参数SendArgs

    在Android应用开发中,我们经常需要在...`SendArgs`类的设计允许开发者更加方便地处理数据传递,避免了直接与Intent和Bundle交互的繁琐。通过这种方式,我们可以提高代码的可维护性和一致性,同时减少错误的可能性。

    面试杂记1

    - isAssignableFrom()与instanceof的区别:前者检查类或接口间的继承关系,后者用于判断对象是否属于指定类或其子类/实现类。 - String、StringBuffer和StringBuilder:String是不可变的,而StringBuffer和...

    第19章编程题 1

    为了确保类型安全,应该在转换前检查元素是否为期望类型,例如使用`instanceof`关键字或`isAssignableFrom`方法。 5. **Comparable接口**: 题目要求`TwoTuple, T2&gt;`实现`Comparable`接口。`Comparable`接口定义了...

Global site tag (gtag.js) - Google Analytics