zoukankan      html  css  js  c++  java
  • Java9以后newInstance()方法被弃用解决办法

    在阅读书中示例代码的过程中,发现一个被弃用的方法 newInstance()

    替代方法:getDeclatedConstructor().newInstance()

    //: typeinfo/toys/ToyTest.java
    // Testing class Class.
    package com.chapter14.toys;
    
    import static com.chapter14.net.mindview.util.Print.print;
    
    interface HasBatteries {}
    interface Waterproof {}
    interface Shoots {}
    
    class Toy {
      // Comment out the following default constructor
      // to see NoSuchMethodError from (*1*)
      Toy() {}
      Toy(int i) {}
    }
    
    class FancyToy extends Toy
    implements HasBatteries, Waterproof, Shoots {
      FancyToy() { super(1); }
    }
    
    public class ToyTest {
      static void printInfo(Class cc) {
        print("Class name: " + cc.getName() +
          " is interface? [" + cc.isInterface() + "]");
        print("Simple name: " + cc.getSimpleName());
        print("Canonical name : " + cc.getCanonicalName());
      }
      public static void main(String[] args) {
        Class c = null;
        try {
          c = Class.forName("typeinfo.toys.FancyToy");
        } catch(ClassNotFoundException e) {
          print("Can't find FancyToy");
          System.exit(1);
        }
        printInfo(c);	
        for(Class face : c.getInterfaces())
          printInfo(face);
        Class up = c.getSuperclass();
        Object obj = null;
        try {
          // Requires default constructor:
          obj = up.newInstance();
        } catch(InstantiationException e) {
          print("Cannot instantiate");
          System.exit(1);
        } catch(IllegalAccessException e) {
          print("Cannot access");
          System.exit(1);
        }
        printInfo(obj.getClass());
      }
    } /* Output:
    Class name: typeinfo.toys.FancyToy is interface? [false]
    Simple name: FancyToy
    Canonical name : typeinfo.toys.FancyToy
    Class name: typeinfo.toys.HasBatteries is interface? [true]
    Simple name: HasBatteries
    Canonical name : typeinfo.toys.HasBatteries
    Class name: typeinfo.toys.Waterproof is interface? [true]
    Simple name: Waterproof
    Canonical name : typeinfo.toys.Waterproof
    Class name: typeinfo.toys.Shoots is interface? [true]
    Simple name: Shoots
    Canonical name : typeinfo.toys.Shoots
    Class name: typeinfo.toys.Toy is interface? [false]
    Simple name: Toy
    Canonical name : typeinfo.toys.Toy
    *///:~
    

    直接使用 newInstance() 方法:

    IDEA会自动把它给划掉

    换成 getDeclatedConstructor().newInstance() 方法:

    但是要多加一个异常捕捉,如图中的箭头所指。

  • 相关阅读:
    sqlserver,获取调用存储过程返回数据的方法。
    手动为弹窗添加一个阴影背景。
    bootstrap资料链接
    进入Linux救援(rescue)模式的四大法门
    virtual box 5.2.12 扩展包安装
    pypi配置国内开源镜像
    vs2015利用python加载dll调试配置
    ubuntu18安装ubuntu kylin软件中心
    firefox快捷键窗口和标签类
    设置双网卡路由
  • 原文地址:https://www.cnblogs.com/fanlumaster/p/13684670.html
Copyright © 2011-2022 走看看