`

Class的isAssignableFrom的用法

    博客分类:
  • java
 
阅读更多
  难用的isAssignableFrom,今天要判断两个类是不是存在父子关系,
首先我们会想到用instanceof去判断,但是有可能是两个接口去比较,
我们用instanceof肯定不行了。后来想到了可爱的Class对象,它里面
提供了一些我们很常见的功能,我的代码是这么写的:

public class AssingableTest {
	public static void main(String[] args) {
		Class<?> parent = java.io.InputStream.class;
		Class<?> child = java.io.FileInputStream.class;
		System.out.println(child.isAssignableFrom(parent));
	}
}

后来发现出错了,我看了一下javadoc,它是这么写的:

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. It returns true if so; otherwise it returns false. If this Class object represents a primitive type, this method returns true if the specified Class parameter is exactly this Class object; otherwise it returns false.

Specifically, this method tests whether the type represented by the specified Class parameter can be converted to the type represented by this Class object via an identity conversion or via a widening reference conversion. See The Java Language Specification, sections 5.1.1 and 5.1.4 , for details.


所以我只能修改代码了,我感觉这个方法的命名有问题,程序修改如下就可以了:


public class AssingableTest {
	public static void main(String[] args) {
		Class<?> parent = java.io.InputStream.class;
		Class<?> child = java.io.FileInputStream.class;
		System.out.println(parent.isAssignableFrom(child));
	}
}
分享到:
评论

相关推荐

    isAssignableFrom

    也就是说,如果A类是B类的父类(或者A接口是B接口的扩展),那么Class对象表示A的`isAssignableFrom`方法调用表示B的Class对象时会返回true。这是一个非常基础但关键的概念,尤其在多态和泛型中应用广泛。 在描述中...

    Java中isAssignableFrom的用法详解

    在Java编程语言中,`Class` 类提供了一个非常有用的方法 `isAssignableFrom()`. 这个方法主要用于判断一个类或接口是否可以被赋值给另一个类或接口,即判断前者是否是后者的超类或超接口。这个功能在泛型、反射以及...

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

    判断一个类是否为另一个类的子类或父类可以使用 Class 对象的 isAssignableFrom() 方法,该方法返回一个布尔值,表示该类是否为另一个类的子类或父类。 在 Java 中,我们可以使用反射机制来获取类中的成员变量、...

    判断类的缓存大小

    `isAssignableFrom(Class&lt;?&gt; cls)`方法同样是`Class`类中的一个方法,用于判断当前类或接口是否可以被赋予由`cls`参数指定的类型。如果当前类可以赋值给`cls`类型的变量,则返回`true`;否则返回`false`。其用法如下...

    反射简单示例

    反射还可以用于检查类是否实现了特定接口或继承自特定父类,使用`isAssignableFrom()`方法。例如: ```java if (String.class.isAssignableFrom(clazz)) { System.out.println("Class is a string-like."); } ``` ...

    Java Reflection(JAVA反射)详解

    1. 使用`Class.forName(String className)`方法,传入类的全限定名(包括包名)来获取对应的`Class`对象。 ```java Class&lt;?&gt; c = Class.forName("java.lang.String"); ``` 2. 直接使用类名或基本类型的`.class`...

    java代码-Class类

    - 使用`Class.forName(String className)`静态方法,传入类的全限定名(包括包名)。 - 对象的`getClass()`方法,例如:`MyClass obj = new MyClass(); Class&lt;?&gt; c = obj.getClass();` - 类的`class`关键字,例如...

    java反射深入剖析(推荐)

    1. 使用`Class.forName("类全名")`,此方法需要提供类的完全限定名(包括包名),并可能抛出`ClassNotFoundException`。 2. 调用对象的`getClass()`方法,如`new Demo().getClass()`,这会返回该对象所属类的`Class`...

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

    简单来说,可以使用Type.IsAssignableFrom方法: typeof(IFoo).IsAssignableFrom(bar.GetType()); typeof(IFoo).IsAssignableFrom(typeof(BarClass)); 从字面意思可以看出,IsAssignableFrom表示BarClass类型能否...

    扫描接口实现类

    3. **接口扫描**:为了找到实现特定接口的所有类,我们需要遍历类路径,加载每个类,并使用`Class.isAssignableFrom(Class&lt;?&gt; clazz)`检查该类是否实现了目标接口。`getInterfaces()`方法可以获取类实现的所有接口。...

    Java反射案例

    使用`Class.newInstance()`方法可以无参构造函数创建对象,但如果有参数的构造函数,需要通过`Constructor`类的`getDeclaredConstructor()`或`getConstructor()`方法获取构造器,然后调用`newInstance()`创建对象。...

    ReflectDemo.rar

    - `isAssignableFrom(Class&lt;?&gt; clazz)`判断是否可以从一个类派生出另一个类。 - `isInterface()`判断是否为接口。 - `isPrimitive()`判断是否为基本类型。 - `getModifiers()`获取方法或字段的修饰符。 6. 枚举...

    反射源代码,源代码,源代码,源代码

    `Class`对象提供了`getInterfaces()`和`isAssignableFrom()`方法,用于检查类是否实现特定接口或是否可以赋值给某个类。同时,可以使用`getAnnotations()`和`isAnnotationPresent()`来获取和检查类、方法或字段上的...

    反射的核心代码

    1. 使用`Class.forName()`方法,传入完全限定类名,例如`Class.forName("java.lang.String")`。 2. 对象的`getClass()`方法,如`String str = "Hello"; Class&lt;?&gt; clazz = str.getClass();`。 3. 类的`class`关键字,...

    Java反射入门

    - `isAssignableFrom(Class&lt;?&gt; c)`: 检查当前Class对象是否可以被指定的Class对象赋值。 4. **创建对象**: - `newInstance()`: 如果类有无参构造器,可以使用此方法创建类的对象。 - `Constructor&lt;?&gt; get...

    java反射调用实例代码

    - 获取接口实现:`boolean isAssignableFrom(Class&lt;?&gt; clazz2)`判断类是否能被转换为`clazz2`类型。 - 实现序列化与反序列化:`ObjectInputStream`和`ObjectOutputStream`可以通过`readObject()`和`writeObject()`...

    反射取继承子类.rar

    但我们可以自定义解决方案,通过遍历所有已加载的类,并检查它们是否通过`isAssignableFrom()`方法表明它们是目标类的子类。以下是一个简单的示例: ```java public List&lt;Class&lt;?&gt;&gt; getAllSubclasses(Class&lt;?&gt; ...

    java教程ppt,讲述了java reflect.,对大家应该很有帮助

    5. **接口和泛型处理**:反射同样适用于接口,可以检查类是否实现了特定接口,通过`isAssignableFrom(Class&lt;?&gt; c)`判断。对于泛型,虽然运行时擦除,但可以通过方法签名获取到泛型信息。 6. **异常处理**:反射操作...

    Java 1.5 反射机制

    反射机制也可以用来检查类是否实现了特定接口,通过`Class`对象的`isAssignableFrom()`方法,可以判断一个类是否可以从另一个类或接口进行赋值。 6. 泛型处理 尽管Java的泛型在编译时被擦除,但反射仍然提供了对...

Global site tag (gtag.js) - Google Analytics