當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。