说明:
本系列博客是本人在工作中遇到的一些问题的整理,其中有些资料来源网络博客,有些信息来自出版的书籍,掺杂一些个人的猜想及验证,总结,主要目的是方便知识的查看,并非纯原创。本系列博客会不断更新。原创不容易,支持原创。对于参考的一些其他博客,会尽量把博客地址列在博客的后面,以方便知识的查看。
Class中的isAssignableFrom(clazz)表示入参是否能自动转换成调用该方法的类型,入参跟类型都是Class类型。
/**
* Created with IntelliJ IDEA.
* User: yejunwu123@gmail.com
* Date: 2014-08-17 21:25
* Description:测试Class.assignableFrom()方法
*/
public class IsAssignableFromTest {
public static void main(String[] args) {
//创建对象
A ab = new B();
A ac = new C();
B bb = new B();
B bc = new C();
C cc = new C();
D dd = new D();
//A.class.isAssignableFrom(..)
System.out.println("A.class.isAssignableFrom(ab) = " + (A.class.isAssignableFrom(ab.getClass())));
System.out.println("A.class.isAssignableFrom(ac) = " + (A.class.isAssignableFrom(ac.getClass())));
System.out.println("A.class.isAssignableFrom(bb) = " + (A.class.isAssignableFrom(bb.getClass())));
System.out.println("A.class.isAssignableFrom(bc) = " + (A.class.isAssignableFrom(bc.getClass())));
System.out.println("A.class.isAssignableFrom(cc) = " + (A.class.isAssignableFrom(cc.getClass())));
System.out.println("A.class.isAssignableFrom(dd) = " + (A.class.isAssignableFrom(dd.getClass())));
//以下这行代码会抛出NullPointerException
//System.out.println("A.class.isAssignableFrom(dd) = " + (A.class.isAssignableFrom(null)));
System.out.println("-------------------------------------");
//B.class.isAssignableFrom(..)
System.out.println("B.class.isAssignableFrom(ab) = " + (B.class.isAssignableFrom(ab.getClass())));
System.out.println("B.class.isAssignableFrom(ac) = " + (B.class.isAssignableFrom(ac.getClass())));
System.out.println("B.class.isAssignableFrom(bb) = " + (B.class.isAssignableFrom(bb.getClass())));
System.out.println("B.class.isAssignableFrom(bc) = " + (B.class.isAssignableFrom(bc.getClass())));
System.out.println("B.class.isAssignableFrom(cc) = " + (B.class.isAssignableFrom(cc.getClass())));
System.out.println("B.class.isAssignableFrom(dd) = " + (B.class.isAssignableFrom(dd.getClass())));
//以下这行代码会抛出NullPointerException
//System.out.println("B.class.isAssignableFrom(dd) = " + (B.class.isAssignableFrom(null)));
System.out.println("-------------------------------------");
//C.class.isAssignableFrom(..)
System.out.println("C.class.isAssignableFrom(ab) = " + (C.class.isAssignableFrom(ab.getClass())));
System.out.println("C.class.isAssignableFrom(ac) = " + (C.class.isAssignableFrom(ac.getClass())));
System.out.println("C.class.isAssignableFrom(bb) = " + (C.class.isAssignableFrom(bb.getClass())));
System.out.println("C.class.isAssignableFrom(bc) = " + (C.class.isAssignableFrom(bc.getClass())));
System.out.println("C.class.isAssignableFrom(cc) = " + (C.class.isAssignableFrom(cc.getClass())));
System.out.println("C.class.isAssignableFrom(dd) = " + (C.class.isAssignableFrom(dd.getClass())));
//以下这行代码会抛出NullPointerException
//System.out.println("C.class.isAssignableFrom(dd) = " + (C.class.isAssignableFrom(null)));
System.out.println("-------------------------------------");
//D.class.isAssignableFrom(..)
System.out.println("D.class.isAssignableFrom(ab) = " + (D.class.isAssignableFrom(ab.getClass())));
System.out.println("D.class.isAssignableFrom(ac) = " + (D.class.isAssignableFrom(ac.getClass())));
System.out.println("D.class.isAssignableFrom(bb) = " + (D.class.isAssignableFrom(bb.getClass())));
System.out.println("D.class.isAssignableFrom(bc) = " + (D.class.isAssignableFrom(bc.getClass())));
System.out.println("D.class.isAssignableFrom(cc) = " + (D.class.isAssignableFrom(cc.getClass())));
System.out.println("D.class.isAssignableFrom(dd) = " + (D.class.isAssignableFrom(dd.getClass())));
//以下这行代码会抛出NullPointerException
//System.out.println("D.class.isAssignableFrom(dd) = " + (D.class.isAssignableFrom(null)));
}
}
对于Class的isAssignableFrom(clazz),入参是被检测的对象,A.class.isAssignableFrom(ab.getClass()),ab.getClass()为被检测对象,只要调用该方法的类型(A)
是被检测对象(ab.getClass())的本身类型、父类或是被检测对象实现的接口,则表达式返回true,否则返回false。
相关推荐
在Java编程语言中,`Class` 类提供了一个非常有用的方法 `isAssignableFrom()`. 这个方法主要用于判断一个类或接口是否可以被赋值给另一个类或接口,即判断前者是否是后者的超类或超接口。这个功能在泛型、反射以及...
本文将深入探讨如何通过Java内置的关键字`instanceof`以及类方法`isInstance(Object obj)`和`isAssignableFrom(Class<?> cls)`来判断类的缓存大小及其相关知识点。 #### `instanceof`关键字 `instanceof`关键字...
jboolean IsAssignableFrom(JNIEnv* env, jclass clazz1, jclass clazz2); ``` - **参数:** - `env`: JNI接口指针。 - `clazz1`: 第一个类参数。 - `clazz2`: 第二个类参数。 - **返回值:** - 如果`clazz1`...
} else if (clazz.isAssignableFrom(Serializable.class)) { return (T) bundle.getSerializable(key); } else { // 其他基本类型 return (T) bundle.getString(key); } } return null; } public void ...
但我们可以自定义解决方案,通过遍历所有已加载的类,并检查它们是否通过`isAssignableFrom()`方法表明它们是目标类的子类。以下是一个简单的示例: ```java public List<Class<?>> getAllSubclasses(Class<?> ...
在这个代码片段中,`Type.GetType(serviceName)`使用字符串服务类型名获取对应的类型对象,`typeof(IService).IsAssignableFrom(serviceType)`检查该类型是否实现了`IService`接口,`Activator.CreateInstance...
在C#中,可以使用`typeof(T).IsAssignableFrom(typeof(IDisposable))`这样的方法来检查类型T是否派生自或实现了IDisposable接口。如果返回`true`,则表明该类实现了IDisposable。 例如: ```csharp if (typeof...
比较类时,应避免依赖类名,而应使用`instanceof`或`Class.isAssignableFrom()`方法,以确保类型安全。 9. **Prevent int promotion with & 0xff**: 当处理字节时,使用`& 0xff`确保不会发生意外的整数提升。这...
`IsAssignableFrom()`判断一个类型是否能赋值给另一个类型,`GetInterface()`和`GetInterfaces()`获取接口,`BaseType`属性获取基类: ```csharp if (t.IsAssignableFrom(typeof(IInterface))) Console.WriteLine...
* 检查类是否是某个类或接口的实例:`clazz.isAssignableFrom(otherClazz)`。 * 获取类的超类:`clazz.getSuperclass()`。 * 获取接口:`clazz.getInterfaces()`。 * 获取构造器:`clazz.getConstructors()` 和 ...
反射还可以用于检查类是否实现了特定接口或继承自特定父类,使用`isAssignableFrom()`方法。例如: ```java if (String.class.isAssignableFrom(clazz)) { System.out.println("Class is a string-like."); } ``` ...
解决方案:使用 m.getReturnType().isAssignableFrom(void.class) 方法来比较类。 8. "InterruptedException" 不应该被忽略 忽略 InterruptedException 可能会导致程序崩溃和安全漏洞。 解决方案:在 catch 块中...
`GetSuperclass`用于获取一个类的超类,`IsAssignableFrom`检查一个类是否可以被赋值给另一个类或接口,这是类型安全检查的重要部分。 2. **异常处理**:JNI提供了处理异常的能力。`Throw`方法用来抛出一个已有的...
高效检索子类,通常涉及使用`Assembly`类来加载程序集,并通过`GetTypes`方法获取其中的所有类型,然后使用`IsSubclassOf`或`IsAssignableFrom`方法检查是否为特定类的子类: ```csharp var assembly = Assembly....
4. 检查类的属性:`isInterface()`, `isEnum()`, `isAssignableFrom()`, `isInstance()`等方法用于判断类的特性。 Java反射的应用场景广泛,如框架开发(如Spring、Hibernate)、动态代理、代码生成工具(如JPA的...
return User.class.isAssignableFrom(clazz); } @Override public void validate(Object target, Errors errors) { ValidationUtils.rejectIfEmptyOrWhitespace(errors, "userName", "用户名不能为空"); ...
`Class`对象提供了`getInterfaces()`和`isAssignableFrom()`方法,用于检查类是否实现特定接口或是否可以赋值给某个类。同时,可以使用`getAnnotations()`和`isAnnotationPresent()`来获取和检查类、方法或字段上的...
使用`Assembly.GetTypes()`获取所有类型,`Type.IsAssignableFrom()`检查类型是否符合我们的插件接口或基类,然后使用`Activator.CreateInstance()`创建实例。 4. **注册和调用插件**:创建插件实例后,我们需要将...
if (clazz.isAssignableFrom(MyInterface.class)) { // 类或其父类实现了MyInterface接口 } ``` 在实际应用中,Java反射常用于框架、插件系统、序列化、元数据处理、动态代理和单元测试等领域。JavaBean是反射的一...