我有3个方法执行相同的操作,但最后3个方法称为diff方法。因此,我想拥有一个方法,而不是使用3个方法,它将接受一个方法作为参数,并在最后调用
请问我该怎么做,我尝试看一下不起作用的java反射,不确定接口是否是正确的方法。
请建议谢谢R
class A {
doSameThingA(int x) { //do same thing with x methodA() } doSameThingB(int x) { //do same thing with x methodB() }
doSameThingC(int x) { //do same thing with x methodC() }
//I WANT TO WRITE A SINGLE FUNCTION replacing the above three doSameThing(int x, Method method) { //do same thing with x method() } }
-------
问题来源:stackoverflow
Java 编程语言只有值传递参数。当一个对象实例作为一个参数被传递到方法中时,参数的值就是该对象的引用一个副本。指向同一个对象,对象的内容可以在被调用的方法中改变,但对象的引用(不是引用的副本)是永远不会改变的。
ava中存在一个运算符,称为双冒号运算符。它也称为方法引用运算符,因为它引用方法,并且我相信此功能将使您可以通过参数化方法来解决问题。有点像lambdas。
class A { public static void main(String... args) { new A().doSameThing(1, MethodClass::printSomething); }
void doSameThing(int x, Runnable method) {
method.run();
}
}
class MethodClass { public static void printSomething() { System.out.println("Hello World"); } }
以上是一个例子。MethodClass包含要运行的方法(例如methodA(),methodB(),methodC()等。doSameThing方法采用Runnable,这是一个不带参数且不返回任何值的功能接口)。通过传递不带参数且不返回值的printSomething方法,我们可以在doSameThing方法中运行该方法。
当然,您使用的功能接口的类型将取决于您的方法设计要实现的功能。
此外,如果您的其他方法(methodA(),methodB(),...)未在代码中的其他任何地方使用,则可以使用匿名类在适当位置实现可运行接口。以下是该形式的先前示例:
class A { public static void main(String... args) { new A().doSameThing(1, new Runnable() { public void run() { System.out.println("Hello World"); } }); } void doSameThing(int x, Runnable method) { method.run(); } }
由于Runnable是功能性接口,因此您甚至可以为此使用lambda表达式。
class A { public static void main(String... args) { new A().doSameThing(1, () -> {
System.out.println("Hello World"); }); } void doSameThing(int x, Runnable method) { method.run(); } }
-------
答案来源:stackoverflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。