前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >java 判断class类型的几种方式

java 判断class类型的几种方式

原创
作者头像
用户3293499
发布2024-08-15 13:43:42
1380
发布2024-08-15 13:43:42
举报
文章被收录于专栏:Java杂谈

编写代码经常需要判断类型,用于执行不同的事件,以下整理了几种方法

代码语言:java
复制
package other;

import static org.junit.jupiter.api.Assertions.assertEquals;

import org.junit.jupiter.api.Test;

public class JudgeClass {
	
	public class F
	{
		
	}
	
	public class S extends F
	{
		
	}
	
    /// 通过 instanceof
	@Test
	public void judge1Test() {
		/// 此方法不能判断父子类问题
		F f1 = new F();
		F s1 = new S();
		assertEquals(true, f1 instanceof F);  /// true
		assertEquals(true, s1 instanceof S);  /// true
		assertEquals(true, s1 instanceof F);  /// true
		assertEquals(true, f1 instanceof S);  /// false
	}
	
    /// instanceof 的另外一种写法
	@Test
	public void judge2Test() {
		/// 方法同上
		F f1 = new F();
		F s1 = new S();
		assertEquals(true, f1.getClass().isInstance(f1));  /// true
		assertEquals(true, s1.getClass().isInstance(s1));  /// true
		assertEquals(true, f1.getClass().isInstance(s1));  /// true
		assertEquals(true, s1.getClass().isInstance(f1));  /// false
	}
    /// 通过isAssignableFrom,可以处理父子关系
	@Test
	public void judge3Test() {
		F f1 = new F();
		F s1 = new S();
		assertEquals(true, f1.getClass().isAssignableFrom(F.class));  /// true
		assertEquals(true, s1.getClass().isAssignableFrom(S.class));  /// true
		assertEquals(true, f1.getClass().isAssignableFrom(S.class));  /// true
		assertEquals(true, s1.getClass().isAssignableFrom(F.class));  /// false
	}
	
    /// 通过类名称(不推荐)
	@Test
	public void judge4Test() {
		F f1 = new F();
		F s1 = new S();
		assertEquals("other.JudgeClass$F", f1.getClass().getName());  /// true
		assertEquals("other.JudgeClass$S", s1.getClass().getName());  /// true
	}
    /// 直接比较class,毕竟class也是对象
	@Test
	public void judge5Test() {
		F f1 = new F();
		F s1 = new S();
		assertEquals(true, f1.getClass().equals(F.class));  /// true
		assertEquals(F.class, f1.getClass());  /// true
		assertEquals(S.class, s1.getClass());  /// true
		assertEquals(F.class, s1.getClass());  /// false
	}
}

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档