![](/img/trans.png)
[英]Java: How do i create objects in a static method and also call for methods from another class?
[英]Send static methods as parameter and generically call within another method in Java
我想使用一個類(一種類型)中的靜態方法,
以使調用通用 。
有沒有辦法實現這個功能? 一些偽代碼有助於舉例說明我正在嘗試做的事情:
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>);
}
}
我可能走錯了路,但這就是我想象的可能。 感謝您的幫助。
宣布:
public class B
{
public void bMethod(Runnable runnable)
{
runnable.run();
}
}
現在將方法引用傳遞給bMethod()
new B().bMethod(A::aMethod1);
new B().bMethod(A::aMethod2);
宣布:
public class B {
public void bMethod(Method method) {
try {
method.invoke(null)
}
catch (Exception e) {
throw new RuntimeException(e);
}
}
}
現在通過反射將方法傳遞給bMethod()
:
new B().bMethod(A.class.getMethod("aMethod1"));
new B().bMethod(A.class.getMethod("aMethod2"));
好吧,你可以用反射來實現。
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
類中的bMethod
簽名可以如下所示:
void bMethod(Behavior b);
瞧! 您現在可以將兩種不同的行為傳遞給您的方法,而不使用丑陋的基於反射的黑客攻擊。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.