当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Java Method类 isBridge()用法及代码示例


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

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

例如,在下面的示例中,以Object为参数的compare()方法的行为就像桥方法。它将把对象强制转换为字符串,并调用以字符串为参数的比较函数。因此,比较(对象a,对象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()。

说明:当子类从父类继承该方法时,则该继承的方法将充当Bridge方法。在此代码中,首先创建一个包含draw方法的Shape类,然后创建一个扩展Shape类的Rectangle类。在主要方法中,创建Rectangle类的draw方法的Method对象。现在检查是否为isBridge()方法。最后打印结果。

// 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/lang/reflect/Method.html#isBridge-
https://stackoverflow.com/questions/5007357/java-generics-bridge-method
http://stas-blogspot.blogspot.com/2010/03/java-bridge-methods-explained.html




相关用法


注:本文由纯净天空筛选整理自AmanSingh2210大神的英文原创作品 Method Class | isBridge() Method in Java。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。