如何访问未知的类方法

时间:2015-07-13 22:54:20

标签: java generics hashmap inner-classes

我目前正在使用Java语言编写代码,但我遇到的情况是

class A{
static class A1{
    void same1(){}
    int same2(){}
}
static class A2{
void same1(){}
    int same2(){}
}
}

我使用泛型将对象存储在地图中,其中我将描述和对象存储为A1和A2

Map<String, Object> mapObject=new HashMap<String, Object>();

如果从地图中检索类名,是否可以访问内部类中的方法。 目前,我可以通过mapObject.get(key).getClass()获取课程名称。 对此有任何帮助将非常感谢。谢谢。

1 个答案:

答案 0 :(得分:1)

请参阅此代码,了解如何使用方法并按照您在评论中的要求通过反射调用。请注意,这段代码非常特别,而您正在尝试做的事情似乎并不正确。几乎没有人需要调用这样的方法。如果您可以在一个新问题中询问您试图解决的问题,您可能会看到其他更好的方法。

package com.so;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;

public class Sample {
    private Map<String,Foo> mapObject = new HashMap<String,Foo>();

    public Sample(){
        Foo foo = new Foo();
        mapObject.put("key", foo);
    }

    public void callMethods() throws IllegalAccessException, IllegalArgumentException, InvocationTargetException{
        Method[] methods = mapObject.get("key").getClass().getDeclaredMethods();
        Object objectString = new String();
        objectString = "Hello";
        for (Method method : methods) {
            if (method.getName().equalsIgnoreCase("printThisString")){
                method.invoke(mapObject.get("key"), objectString)   ;
            }

         }

    }

    public static void main(String...args) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException{
        Sample sample = new Sample();
        sample.callMethods();
    }

}

class Foo {
    public void printThisString(String param){
        System.out.println(param);
    }
}