精华内容
下载资源
问答
  • asSubclass(Classclazz)这是java.lang.Class中的一个方法,作用是将调用这个方法的class对象转换成由clazz参数所表示的class对象的某个子类。举例来说,ListstrList=newArrayList();ClassextendsList>strList_...

    public  Class extends U> asSubclass(Class clazz)

    这是java.lang.Class中的一个方法,作用是将调用这个方法的class对象转换成由clazz参数所表示的class对象的某个子类。举例来说,

    List strList = new ArrayList();

    Class extends List> strList_cast = strList.getClass().asSubclass(List.class);

    上面的代码将strList.getClass()获取的class对象转换成Class extends List>,这么做似乎没有什么意义,因为我们很清楚strList.getClass()获取的class对象就是ArrayList,它当然是List.class的一个子类;

    但有些情况下,我们并不能确知一个class对象的类型,典型的情况是Class.forName()获取的class对象:

    Class.forName()的返回类型是Class>,但这显然太宽泛了,假设我们需要List.class类型的class对象,但我们传递给Class.forName的参数是未知的(可能是"java.lang.String",也可能是"java.util.ArrayList"),这时我们就可以用到asSubclass()这个方法了,如下:

    Class.forName("xxx.xxx.xxx").asSubclass(List.class).newInstance();

    当xxx.xxx.xxx是List的子类时,正常执行,当不是List的子类时,抛出ClassCastException,这时我们可以做些别的处理;

    如果我们查看Class.asSubclass()在JDK中的中的引用的话,会发现这种用法有很多。

    这里有必要说下 instanceof 关键字.

    <> instanceof <>

    它的用法用于判断一个Object是否是某个超类或者接口的一个子类或者实现类(不一定是直接超类或者直接接口),如下

    interface IFace {

    }

    class IFaceImpl implements IFace {

    }

    class IFaceImplExt extends IFaceImpl {

    }

    System.out.println(new IFaceImpl() instanceof IFace); // true

    System.out.println(new IFaceImplExt() instanceof IFace); // true

    asSubclass用于窄化未知的Class类型的范围,而instanceof用于判断一个对象引用是否是一个超类或者接口的子类/实现类,如果试图将instanceof用于Class类型的判断会引起编译错误。

    // both will cause compliration error

    System.out.println(IFaceImpl.class instanceof IFace);

    System.out.println(IFaceImplExt.class instanceof IFace.class);

    转载:http://jasonhan-sh-hotmail-com.iteye.com/blog/1838413

    展开全文
  • 类方法 isAssignableFrom、instanceof 和 asSubclassSpring 框架 CollectionFactory 的 asEnumType 方法使用 "类.asSubclass()",代码如下:private static Class extends Enum> asEnumType(Class> enumType) ...

    类方法 isAssignableFrom、instanceof 和 asSubclass

    Spring 框架 CollectionFactory 的 asEnumType 方法使用 "类.asSubclass()",代码如下:

    private static Class extends Enum> asEnumType(Class> enumType) {

    Assert.notNull(enumType, "Enum type must not be null");

    if (!Enum.class.isAssignableFrom(enumType)) {

    throw new IllegalArgumentException("Supplied type is not an enum: " + enumType.getName());

    }

    return enumType.asSubclass(Enum.class);

    }

    1. class1.isAssignableFrom(class2)

    判断 class2 是不是 class1 的子类或者子接口

    List.class.isAssignableFrom(ArrayList.class) // true

    String.class.isAssignableFrom(ArrayList.class) // false

    2. obj instanceof 类名

    "string" instanceof String // true

    3. asSubclass

    public Class extends U> asSubclass(Class clazz) {

    if (clazz.isAssignableFrom(this))

    return (Class extends U>) this;

    else

    throw new ClassCastException(this.toString());

    }

    这是 java.lang.Class 中的一个方法,作用是将调用这个方法的 class 对象转换成由 clazz 参数所表示的 class 对象的某个子类。举例来说

    List strList = new ArrayList();

    Class extends List> strList_cast = strList.getClass().asSubclass(List.class);

    上面的代码将 strList.getClass() 获取的 class 对象转换成 Class extends List>,这么做似乎没有什么意义,因为我们很清楚 strList.getClass() 获取的class对象就是 ArrayList,它当然是 List.class 的一个子类;但有些情况下,我们并不能确知一个 class 对象的类型,典型的情况是 Class.forName() 获取的 class 对象:class.forName()的返回类型是 Class<>,但这显然太宽泛了,假设我们需要 List.class 类型的 class 对象,但我们传递给 Class.forName 的参数是未知的(可能是 "java.lang.String",也可能是 "java.util.ArrayList"),这时我们就可以用到 asSubclass() 这个方法了,如下:

    Class.forName("xxx.xxx.xxx").asSubclass(List.class).newInstance();

    当 xxx.xxx.xxx 是 List 的子类时,正常执行,当不是 List 的子类时,抛出 ClassCastException,这时我们可以做些别的处理;如果我们查看 Class.asSubclass() 在 JDK 中的中的引用的话,会发现这种用法有很多。asSubclass 用于窄化未知的 Class 类型的范围

    参考:

    java isAssignableFrom instanceof 小结 专题

    一句话总结: isAssignableFrom()方法是从类继承的角度去判断,instanceof()方法是从实例继承的角度去判断. public native boolean isAssignabl ...

    Java【第七篇】面向对象之类设计

    Java类的继承 类继承语法规则 < 修饰符> class < 子类名称> [extends < 父类>] { }  类的继承 子 ...

    Java推断类和实例的关系

    通常我们使用instanceOf关键字来推断一个对象是否是类的实例,近期博主看到isInstance关键字,不解与instanceOf的差别,故度娘了一下,顺便涨了一下姿势.    Java中推 ...

    instanceof,isinstance,isAssignableFrom,asSubclass的区别

    1,isAssignableFrom():是字节码对象的方法 是用来判断一个类的字节码对象和另一个类的字节码对象是否相同或是子类或接口. assignable英 [ə,sainəbl]美 [ə,sai ...

    instanceof&comma; isinstance&comma;isAssignableFrom的区别

    instanceof运算符 只被用于对象引用变量,检查左边的被测试对象 是不是 右边类或接口的 实例化.如果被测对象是null值,则测试结果总是false. 形象地:自身实例或子类实例 instanc ...

    instanceof 与isAssignableFrom

    instanceof 针对实例 isAssignableFrom针对class对象 isAssignableFrom   是用来判断一个类Class1和另一个类Class2是否相同或是另一个类的超类或 ...

    instanceof、 isinstance 与 isAssignableFrom的区别

    instanceof运算符 只被用于对象引用变量,检查左边的被测试对象 是不是 右边类或接口的 实例化.如果被测对象是null值,则测试结果总是false. 形象地:自身实例或子类实例 instanc ...

    isAssignableFrom与instanceof的区别

    1.isAssignableFrom针对的是class对象: 2.instanceof是实例. isAssignableFrom是用来判断一个类Class1和另一个类Class2是否相同或是另一个类的 ...

    随机推荐

    iOS - Runloop个人总结

    调用堆栈: 程序运行之前,自上而下启动 iOS端用的所用系统framework都是动态链接的. dyld:The dynamic link editor 动态链接器

    Exists 比Contains 慢非常多。

    void Main() { List s = new List(){}; for(int i=0;i<10000;i++) { s.Add ...

    ListView滑动删除效果实现

    通过继承ListView然后结合PopupWindow实现 首先是布局文件: delete_btn.xml:这里只需要一个Button <?xml version="1.0" ...

    关于&OpenCurlyDoubleQuote;创业者与VC见面的10个不成文细节点”

    著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处.作者:Will Wang链接:http://www.zhihu.com/question/19641135/answer/50974 ...

    orangepi one AP模式配置

    前两天买了一块orangepi one开发板,目的是做个局域网共享目录,具体共享协议用samba:这块板子有两个网卡,一个有线一个无线:有线主要用来ssh登陆调试,修改配置. 首先下载armbian的 ...

    BeautifulSoup中查找元素 select&lpar;&rpar; 和find&lpar;&rpar;区别

    从html中查找元素,之前一般都用find(),查找符合条件的第一个,如下 f = open(file, 'r') # 读取文件内容content = f.read()soup= BeautifulS ...

    android ActionBarImpl can only be used with a compatible window decor layout

    在Activity中添加 requestWindowFeature(Window.FEATURE_ACTION_BAR); requestWindowFeature(Window.FEATURE_AC ...

    &lbrack;转&rsqb; oracle 数据库 SQL plus 连接方法

    http://hi.baidu.com/zzy382/item/a5b197f97a38e01ba7298832 之前电脑上安装了一个 Oracle  有一段时间没用,就把密码给忘了,按上面链接里的操 ...

    跳表&lpar;skiplist&rpar;Python实现

    # coding=utf-8 # 跳表的Python实现 import random # 最高层数设置为4 MAX_LEVEL = 4 def randomLevel(): ""& ...

    sql先分组,再算百分比

    --先分组,再算百分比 SELECT  a.CooperationIntention ,         a.OrganizationID ,         COUNT(*) 数量 , CONVER ...

    展开全文
  • 另外我们还有一个方法是asSubclass,它将一个类转换成另外一个的实例,如果转换异常就会抛出ClassCastException异常,也就是这个类不是另外一个类的实例;所以我们可以通过它抛出异常的方式来判断一个类是否是另外一...

     
    干饭人干饭时间,第一个冲向饭店!

     


    1. 方法解读

    将当前类转化为指定类的子类,用以窄化对象,在Java中我们判断一个类是否是另外一个类的实例对象通常使用instanceof,动态运行时我们会用Class.isInstance方法来判断对象和类之间是否能够相互转化。另外我们还有一个方法是asSubclass,它将一个类转换成另外一个的实例,如果转换异常就会抛出ClassCastException异常,也就是这个类不是另外一个类的实例;所以我们可以通过它抛出异常的方式来判断一个类是否是另外一个类的实例;

     


    2. 源码分析

        /**
         * Casts this {@code Class} object to represent a subclass of the class
         * represented by the specified class object.  Checks that the cast
         * is valid, and throws a {@code ClassCastException} if it is not.  If
         * this method succeeds, it always returns a reference to this class object.
         *
         * <p>This method is useful when a client needs to "narrow" the type of
         * a {@code Class} object to pass it to an API that restricts the
         * {@code Class} objects that it is willing to accept.  A cast would
         * generate a compile-time warning, as the correctness of the cast
         * could not be checked at runtime (because generic types are implemented
         * by erasure).
         *
         * @param <U> the type to cast this class object to
         * @param clazz the class of the type to cast this class object to
         * @return this {@code Class} object, cast to represent a subclass of
         *    the specified class object.
         * @throws ClassCastException if this {@code Class} object does not
         *    represent a subclass of the specified class (here "subclass" includes
         *    the class itself).
         * @since 1.5
         */
        @SuppressWarnings("unchecked")
        public <U> Class<? extends U> asSubclass(Class<U> clazz) {
            if (clazz.isAssignableFrom(this))
                return (Class<? extends U>) this;
            else
                throw new ClassCastException(this.toString());
        }
    
    • 概要
      将当前Class对象转换成指定的Class对象,如果有当前的Class并非指定的Class的子类则抛出异常;常用于需要将一个Class对象窄化,以适应与某个API中的方法接受的参数。如果此方法成功,则它始终返回对此类对象的引用。失败则抛出ClassCastException 。
    • 参数
      Class<U> clazz - 一个泛型类
    • 结果
      Class<? extends U>- 继承参数类的类
    • 异常
      ClassCastException - 如果此类对象不表示指定类的子类(包括类本身),则会抛出类转换异常。

     


    3. 实例演示

    public class Test {
    
        public static void main(String[] args) {
            class SuperClass {
            }
    
            class SubClass extends SuperClass {
            }
    
            Class<?> clazz = SubClass.class;
            String name = clazz.getName();
            try {
                Class<?> SuperClass = clazz.asSubclass(SuperClass.class);
                System.out.println(name + "是SuperClass的子类");
            } catch (ClassCastException e) {
                System.out.println(name + "不是SuperClass的子类");
            }
    
        }
    
    }
    
    ................................................................
    ・【CONSOLE】実行結果
    	com.it.god.controller.Test$1SubClass是SuperClass的子类
    
    
    展开全文
  • Class.asSubclass浅谈

    2021-02-28 19:01:30
    asSubclass(Class clazz)这是java.lang.Class中的一个方法,作用是将调用这个方法的class对象转换成由clazz参数所表示的class对象的某个子类。举例来说,Java代码List strList = new ArrayList();Class extends ...

    Java代码

    public Class extends U> asSubclass(Class clazz)

    这是java.lang.Class中的一个方法,作用是将调用这个方法的class对象转换成由clazz参数所表示的class对象的某个子类。举例来说,

    Java代码

    List strList = new ArrayList();

    Class extends List> strList_cast = strList.getClass().asSubclass(List.class);

    上面的代码将strList.getClass()获取的class对象转换成Class extends List>,这么做似乎没有什么意义,因为我们很清楚strList.getClass()获取的class对象就是ArrayList,它当然是List.class的一个子类;

    但有些情况下,我们并不能确知一个class对象的类型,典型的情况是Class.forName()获取的class对象:

    Class.forName()的返回类型是Class>,但这显然太宽泛了,假设我们需要List.class类型的class对象,但我们传递给Class.forName的参数是未知的(可能是"java.lang.String",也可能是"java.util.ArrayList"),这时我们就可以用到asSubclass()这个方法了,如下:

    Java代码

    Class.forName("xxx.xxx.xxx").asSubclass(List.class).newInstance();

    当xxx.xxx.xxx是List的子类时,正常执行,当不是List的子类时,抛出ClassCastException,这时我们可以做些别的处理;

    如果我们查看Class.asSubclass()在JDK中的中的引用的话,会发现这种用法有很多。

    这里有必要说下 instanceof 关键字.

    Java代码

    <> instanceof <>

    它的用法用于判断一个Object是否是某个超类或者接口的一个子类或者实现类(不一定是直接超类或者直接接口),如下

    Java代码

    interface IFace {

    }

    class IFaceImpl implements IFace {

    }

    class IFaceImplExt extends IFaceImpl {

    }

    System.out.println(new IFaceImpl() instanceof IFace); // true

    System.out.println(new IFaceImplExt() instanceof IFace); // true

    asSubclass用于窄化未知的Class类型的范围,而instanceof用于判断一个对象引用是否是一个超类或者接口的子类/实现类,如果试图将instanceof用于Class类型的判断会引起编译错误。

    Java代码

    // both will cause compliration error

    System.out.println(IFaceImpl.class instanceof IFace);

    System.out.println(IFaceImplExt.class instanceof IFace.class);

    原文转载自:http://jasonhan-sh-hotmail-com.iteye.com/blog/1838413

    展开全文
  • assubclass 类类asSubclass()方法 (Class class asSubclass() method) asSubclass() method is available in java.lang package. asSubclass()方法在java.lang包中可用。 asSubclass() method casts this Class ...
  • asSubclass

    2017-07-20 11:45:42
    这个函数的作用是将调用该方法的Class对象转换成clazz对象对应类的某个子类,注意是某个子类,clazz对应类的...例如Class.forName("xxxx")返回的类是未知的而我们又希望获得需要的类对象,这时候就可以使用asSubclass方法
  • Class类asSubclass()方法asSubclass()方法在java.lang包中可用。asSubclass()方法强制转换此Class对象,以表示由给定Class对象表示的类的子类。asSubclass()方法是一个非静态方法,只能通过类对象访问,如果尝试使用...
  • 另外我们还有一个方法是asSubclass,它将一个类转换成另外一个的实例,如果转换异常就会抛出ClassCastException异常,也就是这个类不是另外一个类的实例;所以我们可以通过它抛出异常的方式来判断一个类是否是另外一...
  • //This is type safe,but I still get an unchecked cast warningt = (Class) Class.forName(className).asSubclass(Enum.class).asSubclass(Runnable.class);哇,放慢一秒!这是真的吗?不,这不对!你所做的就是确定...
  • Class类的asSubClass()方法

    千次阅读 2014-07-09 22:50:52
    public <U> Class<? extends U> asSubclass(Class<U> clazz) { if (clazz.isAssignableFrom(this)) return (Class) this; else throw new ClassCastException(this.toString()); } 这个方法实现的功能很好懂...
  • java.lang.Class.asSubclass() 方法施放此Class对象,以表示指定的Class对象所表示的类的子类。当一个客户端需要“窄”一类的对象的类型将它传递给了限制类的对象,它愿意接受一个API,它是有用的。声明以下是java....
  • 这个函数的作用是将调用该方法的Class对象转换成clazz对象对应类的某个子类,注意是某个子类,clazz...例如Class.forName("xxxx")返回的类是未知的而我们又希望获得需要的类对象,这时候就可以使用asSubclass方法了 代
  • //pre java5 // this would have not compiled if asSubclass was declared above like 快速检查: public static Class asSubClaz(Class t, Class c){ return t.asSubClass(c); } public static Class ...
  • Java Class asSubclass()方法java.lang.Class.asSubclass()方法施放此Class对象,以表示指定的Class对象所表示的类的子类。当一个客户端需要“窄”一类的对象的类型将它传递给了限制类的对象,它愿意接受一个API,它...
  • java反射中asSubclass方法

    千次阅读 2013-02-28 21:33:31
    Class asSubClass(Class)这个方法是什么意思呢? 从名字上看貌似是将调用的Class转成括号内的Class的子类,但是正好是反的。。。。 这个方法的作用是:父类作为参数,将父类转化为子类。 Class clazz=List.class;...
  • asSubclass用于窄化未知的Class类型的范围,而instanceof用于判断一个对象引用是否是一个超类或者接口的子类/实现类,如果试图将instanceof用于Class类型的判断会引起编译错误。 通常在向某些参数严格限制的API...
  • asSubclass用于窄化未知的Class类型的范围,而instanceof用于判断一个对象引用是否是一个超类或者接口的子类/实现类,如果试图将instanceof用于Class类型的判断会引起编译错误。 // both will cause compliration...
  • asSubclass(Class clazz)描述 (Description)java.lang.Class.asSubclass()方法强制转换此Class对象以表示由指定的类对象表示的类的子类。当客户端需要“缩小”Class对象的类型以将其传递给它时,它很有用。一个限制...
  • 案例: public static Annotation getAnnotation ( AnnotatedElement element ... String annotationTypeName ...asSubclass ...Class#asSubclass() 方法,将其转换成 Annotation.class 的子类。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,550
精华内容 620
关键字:

asSubclass