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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。