メソッド "abc"は、staticキーワードでは宣言されていません。 abcメソッドを呼び出すには、A、B、C、D(おそらくanonymously)のインスタンスをインスタンス化する必要があります。
Reflectionを使用するとこれについて知ることができますが、実際には推奨しません。
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
class A
{
void abc()
{
System.out.println("A");
}
}
class B
{
void abc()
{
System.out.println("B");
}
}
class C
{
void abc()
{
System.out.println("C");
}
}
class D
{
void abc()
{
System.out.println("D");
}
}
public class Testing {
public static void main(String[] args) throws InstantiationException, IllegalAccessException, NoSuchMethodException, IllegalArgumentException, InvocationTargetException {
Class classes[] = { A.class, B.class, C.class, D.class };
for (Class c : classes) {
Object x = c.newInstance();
Method abc = c.getDeclaredMethod("abc");
abc.invoke(x);
}
}
}
もっと簡単な方法は、インターフェイスを使用することです。まだ少し反射を使用して、それはこのように見えるかもしれません:
interface Abc {
void abc();
}
class A implements Abc
{
@Override
public void abc()
{
System.out.println("A");
}
}
class B implements Abc
{
@Override
public void abc()
{
System.out.println("B");
}
}
class C implements Abc
{
@Override
public void abc()
{
System.out.println("C");
}
}
class D implements Abc
{
@Override
public void abc()
{
System.out.println("D");
}
}
public class Testing {
public static void main(String[] args) throws InstantiationException, IllegalAccessException {
Class classes[] = { A.class, B.class, C.class, D.class };
for (Class c : classes) {
Abc x = (Abc) c.newInstance();
x.abc();
}
}
}
ソクラテスのアプローチを取る:コードで一緒にグループ化するアクションのグループがある場合は、どうしますか? –
インターフェイスとコレクションを使用して見てください。 – OldProgrammer
私はあなたが何をしようとしているのか理解できません。なぜですか? 'D'は' C'を呼び出し、 'C'は' B'などを起動しますか? – c0der