有没有办法静态引用Java中的反射方法.这里有一些示例代码可以让您了解我正在尝试的内容:
public void myFunc(int x) { ... }
public void other() {
Method m1 = getClass().getMethod("myFunc"); // dynamic
Method m2 = this.myFunc; // static
Method m3 = MyClass.myFunc; // static (alternate)
}
Run Code Online (Sandbox Code Playgroud)
我认识到上面的语法不起作用,但我想知道是否存在某种与此类似的语法实际上是有效的.我想要一种使用反射的方法,而不必担心通过字符串引用方法的固有危险.
有没有办法做到这一点,还是只是一个梦想?
方法参考说明
这种比较两个 Person 实例的出生日期的方法已经存在于
Person.compareByAge. 您可以在 lambda 表达式的主体中调用此方法:Run Code Online (Sandbox Code Playgroud)Arrays.sort(rosterAsArray, (a, b) -> Person.compareByAge(a, b) );由于此 lambda 表达式调用现有方法,因此您可以使用 > 方法引用而不是 lambda 表达式:
Run Code Online (Sandbox Code Playgroud)Arrays.sort(rosterAsArray, Person::compareByAge);
然后继续解释各种方法引用:
方法引用有四种:
Reference to a static method ContainingClass::staticMethodName
Reference to an instance method
of a particular object containingObject::instanceMethodName
Reference to an instance method ContainingType::methodName
of an arbitrary object of a
particular type
Reference to a constructor ClassName::new
Run Code Online (Sandbox Code Playgroud)
历史记录(写于 Java 8 最终确定之前)
我认为 Java 闭包提案有这样的内容。 斯蒂芬·科尔伯恩说:
Stefan 和我很高兴地宣布发布 First-class Methods v0.4:Java 风格的闭包提案。
变化
自 v0.3 以来,我们尝试整合在各个论坛上收到的一些反馈。主要变化如下:
1) 构造函数和字段文字。现在可以使用 FCM 语法创建类型安全、编译时更改的
java.lang.reflect.Constructor实例Field:Run Code Online (Sandbox Code Playgroud)// method literal: Method m = Integer#valueOf(int); // constructor literal: Constructor<Integer> c = Integer#(int); // field literal: Field f = Integer#MAX_VALUE;
但我认为这种语法在任何发布的 JVM 中都不可用。闭包本身绝对不在 Java 7 中。您可能会在 Java 8 中看到它。
Java闭包站点有一个指向“方法引用”的指针,该指针是最新的,尽管看起来它们对语法没有太大改变。
| 归档时间: |
|
| 查看次数: |
963 次 |
| 最近记录: |