【问题标题】:How to access unknown class methods如何访问未知的类方法
【发布时间】:2015-07-13 22:54:20
【问题描述】:

我目前正在使用 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() 获取班级名称。 对此的任何帮助将不胜感激。谢谢。

【问题讨论】:

  • mapObject.get(key).getClass().getDeclaredMethods()
  • 在 Java 中只有对象被大写。 classstaticvoidint 都应该是小写的。 StringObject(Hash)Map 都是对象,所以它们是唯一应该大写的词。
  • @Shahzeb 谢谢一百万,我能够得到方法,你能帮我多一点吗。实际上我也需要传递参数。我怎样才能将它传递给方法对象?跨度>
  • @TotZam 是的,我很抱歉,我只是想举个例子,所以在文档中创建并自动更正已经完成了它的工作。 :(
  • @Vin99999:Java API 使您能够探索在编译时为自己的程序不知道的类、接口、方法和字段,称为反射 API。 docs.oracle.com/javase/tutorial/reflect 有一个很好的反射教程

标签: java generics hashmap inner-classes


【解决方案1】:

查看此代码以了解如何使用方法并按照您在 cmets 中的要求通过反射调用。请注意,此代码非常临时,您尝试执行的操作似乎不正确。几乎没有人需要调用这样的方法。如果您可以在一个新问题中询问您要解决的问题是什么,您可能会看到其他更好的方法。

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);
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多