Die Methoden "abc" sind nicht mit dem Schlüsselwort static deklariert. Sie müssen eine Instanz von A, B, C und D instanziieren (vielleicht anonymously), um die abc-Methode aufzurufen.
Sie können Reflection verwenden, um darüber zu kommen, aber ich kann es nicht wirklich empfehlen.
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);
}
}
}
Je einfacher Weg, um darüber zu bekommen, ist eine Schnittstelle zu verwenden. Immer noch mit ein wenig Reflexion, könnte es so aussehen:
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();
}
}
}
Einen sokratischen Ansatz: Wenn Sie eine Gruppe von Aktionen haben, die Sie in Code zusammen gruppieren möchten, wie machst du das? –
Verwenden Sie eine Schnittstelle und eine Sammlung. – OldProgrammer
Ich verstehe nicht, was Sie versuchen (und warum). Möchtest du mit 'D'' C' und 'C' mit' B' usw. aufrufen? – c0der