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() 方法:

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

  • 相关阅读:
    迷宫寻找路径数
    136. 只出现一次的数字
    48. 旋转图像
    283. 移动零
    面试题 01.06. 字符串压缩
    位运算符
    367. 有效的完全平方数
    868. 二进制间距
    SpringAOP表达式
    Mybatis常见错误及纠错
  • 原文地址:https://www.cnblogs.com/fanlumaster/p/13684670.html
Copyright © 2011-2022 走看看