📜  方法类 | Java中的 isBridge() 方法

📅  最后修改于: 2022-05-13 01:55:42.666000             🧑  作者: Mango

方法类 | Java中的 isBridge() 方法

Java.lang.reflect.Method.isBridge()方法用于检查函数是否为桥接函数。如果方法对象是桥方法,则此方法返回 true,否则返回 false。

桥接方法:这些方法在源函数和目标函数之间创建中间层。它通常用作类型擦除过程的一部分。这意味着桥方法需要作为类型安全的接口。

例如,在下面的示例中,以Object为参数的 compare() 方法表现为桥方法。它将对象转换为字符串并调用以字符串为参数的比较函数。所以compare (Object a, Object b)充当源(调用 compare() 的方法)和目标(compare(String, String))之间的桥梁部分。

例子:

public class compareValues implements Comparator {

   // target method
   public int compare(String a, String b) 
   {
   }
   
   // bridge method
   public int compare(Object a, Object b) {
      return compare((String)a, (String)b);
   }
}

句法:

public boolean isBridge()

返回值:如果方法对象是 JVM 规范的桥接方法,则此方法返回true ,否则返回false

下面的程序说明了 Method 类的 isBridge() 方法:

程序 1:返回 BigInteger 类的所有 Bridge 方法的程序。

说明:在这个方法中首先创建了 BigInteger 类对象。创建对象后,通过调用 Object 类的 getMethods() 创建一个方法对象列表。现在迭代获取的方法列表并检查 isBridge()。因此我们得到了桥接方法。最后打印桥接方法名称。

/*
* Program Demonstrate isBridge() method 
* of Method Class.
*/
import java.lang.reflect.Method;
import java.math.BigInteger;
public class GFG {
  
    // create main method
    public static void main(String args[])
    {
  
        try {
  
            // create BigInteger class object
            Class bigInt = BigInteger.class;
  
            // get list of Method object
            Method[] methods = bigInt.getMethods();
  
            System.out.println("Bridge Methods of BigInteger Class are");
  
            // Loop through Methods list
            for (Method m : methods) {
  
                // check whether the method is Bridge Method or not
                if (m.isBridge()) {
                    // Print Method name
                    System.out.println("Method: " + m.getName());
                }
            }
        }
        catch (Exception e) {
            // print Exception is any Exception occurs
            e.printStackTrace();
        }
    }
}
输出:
Bridge Methods of BigInteger Class are
Method: compareTo

程序 2:检查自定义方法 isBridge() 与否。

说明:当子类从父类继承方法时,继承的方法充当桥接方法。在此 Code First 中,创建了一个包含 draw 方法的 Shape 类,然后创建了一个扩展 Shape 类的 Rectangle 类。在 main 方法中,创建了 Rectangle 类的 draw 方法的 Method 对象。现在检查是否是Bridge()方法。最后打印结果。

// Program Demonstrate isBridge() method
// of Method Class.
// In this program a custom bridge method is created
// and by use of isBridge(), checked for Bridge Method
  
import java.lang.reflect.Method;
  
public class GFG {
  
    // create class
    protected class Shape {
        public void draw() {}
    }
  
    // create a class which extends Shape class
    public class Rectangle extends Shape {
    }
  
    // create main method
    public static void main(String args[])
    {
  
        try {
  
            // create class object for class
            // Rectangle and get method object
            Method m = Rectangle.class.getDeclaredMethod("draw");
  
            // check method is bridge or not
            boolean isBridge = m.isBridge();
  
            // print result
            System.out.println(m + " method is Bridge Method :"
                               + isBridge);
        }
        catch (NoSuchMethodException | SecurityException e) {
  
            // Print Exception if any Exception occurs
            e.printStackTrace();
        }
    }
}
输出:
public void GFG$Rectangle.draw() method is Bridge Method :true

参考:
https://docs.oracle.com/javase/8/docs/api/java Java
https://stackoverflow.com/questions/5007357/java-generics-bridge-method
http://stas-blogspot.blogspot.com/2010/03/java-bridge-methods-explained.html