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
相關用法
- Java Method類 getParameterTypes()用法及代碼示例
- Java Method類 getReturnType()用法及代碼示例
- Java Method類 getGenericReturnType()用法及代碼示例
- Java Method類 getParameterAnnotations()用法及代碼示例
- Java Method類 getAnnotatedReturnType()用法及代碼示例
- Java Method類 getExceptionTypes()用法及代碼示例
- Java Method類 equals()用法及代碼示例
- Java Method類 getTypeParameters()用法及代碼示例
- Java Method類 getGenericExceptionTypes()用法及代碼示例
- Java Method類 hashCode()用法及代碼示例
- Java Method類 getDefaultValue()用法及代碼示例
- Java Method類 getAnnotation()用法及代碼示例
- Java Method類 getGenericParameterTypes()用法及代碼示例
- Java Method類 isVarArgs()用法及代碼示例
注:本文由純淨天空篩選整理自AmanSingh2210大神的英文原創作品 Method Class | isBridge() Method in Java。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。