将静态方法作为参数发送,并在Java中的另一个方法中进行一般调用
我想使用来自一个类(一种类型)的静态方法将静态方法作为参数发送,并在Java中的另一个方法中进行一般调用,java,oop,generics,methods,polymorphism,Java,Oop,Generics,Methods,Polymorphism,我想使用来自一个类(一种类型)的静态方法 将它们发送到不同类中的另一个方法,然后 在不同类的方法中调用它们,而不显式使用它们的名称 以便使调用通用 有没有办法实现这个功能?一些伪代码有助于举例说明我要做的事情: public class A { public static void aMethod1() { //do something } public static void aMethod2() {
public class A
{
public static void aMethod1()
{
//do something
}
public static void aMethod2()
{
//do something else
}
}
public class B
{
public void bMethod(<Parameter that can take any of A's methods polymorphically>)
{
<call ANY method sent in by the parameter with the same line of code>
}
}
public class Main
{
public static void main(String[] args)
{
A obj_A = new A();
B obj_B = new B();
obj_B.bMethod(<Send any of A's methods>);
}
}
公共A类
{
公共静态void aMethod1()
{
//做点什么
}
公共静态void aMethod2()
{
//做点别的
}
}
公共B级
{
公共无效b方法();
}
}
我可能走上了完全错误的道路,但这是我想象中可能会发生的事情。提前感谢您的帮助。使用方法参考:
宣布:
public class B
{
public void bMethod(Runnable runnable)
{
runnable.run();
}
}
public class B {
public void bMethod(Method method) {
try {
method.invoke(null)
}
catch (Exception e) {
throw new RuntimeException(e);
}
}
}
现在转到bMethod()
使用反射
宣布:
public class B
{
public void bMethod(Runnable runnable)
{
runnable.run();
}
}
public class B {
public void bMethod(Method method) {
try {
method.invoke(null)
}
catch (Exception e) {
throw new RuntimeException(e);
}
}
}
现在将方法传递给bMethod()
:
你可以通过反射来实现
public void bMethod(String name) throws NoSuchMethodException,
InvocationTargetException,
IllegalAccessException {
A.class.getMethod(name).invoke(null);
}
其中,name
是方法的名称(可以是aMethod1
或aMethod2
)
然而,这不是一种真正的OOP方法,您应该真正使用其他方法。例如,定义一个名为Behavior
interface Behavior {
void run();
}
然后创建此接口的两个不同实现
class BehaviorA implements Behavior {
@Override
public void run() {
// Behavior A
}
}
class BehaviorB implements Behavior {
@Override
public void run() {
// Behavior B
}
}
现在,您的B方法
在B
类中的签名可以如下所示:
void bMethod(Behavior b);
瞧!您现在可以将两种不同的行为传递给方法,而无需使用丑陋的基于反射的hack。在Java中,方法不是像其他一些语言中那样可以传递的对象。您可能正在寻找的是接口,尽管这对静态方法没有帮助。如果您可以使用Java8,您可能希望了解接口上的默认方法。这可能会让您更接近。您应该查找函数接口,它们完全可以执行您想要的操作,除了该方法没有在另一个类中声明之外,它不完全是您想要的,但可能是您可以执行的最好的操作。@Cyper实际上从Java 8开始,您可以将方法作为对象传递。语法有点不可靠,但它works@Mshnik你知道这个功能叫什么吗?我想看一看。静态方法在所有类型的a中将保持不变。。您可以只调用.method1(),而不必使用任何对象。这是我的做法,但他似乎特别希望
b方法(…)
只获取A
中声明的方法引用,而不从其他任何地方获取。@Mshnik。OP没有明确地说。可能也很有帮助,非常感谢!方法引用正是我想要的。