gpt4 book ai didi

Java:反射调用实现公共(public)接口(interface)的非公共(public)类中的方法

转载 作者:搜寻专家 更新时间:2023-11-01 03:12:50 25 4
gpt4 key购买 nike

我正在尝试使用反射来调用一个名称和参数在运行时已知的方法,但我失败了,出现了 IllegalAccessException

这是一个对象,该对象是实现公共(public)接口(interface)的非公共(public)类的实例,我脑筋急转弯,试图记住调用这种方法的正确方法。

public interface Foo
{
public int getFooValue();
}

class FooImpl implements Foo
{
@Override public int getFooValue() { return 42; }
}

Object foo = new FooImpl();

给定 foo 对象,我如何以反射方式调用 foo.getFooValue()?

如果我查看 foo.getClass().getMethods() 的结果,这应该有效,但我认为它会导致 IllegalAccessException必须调用 getDeclaredMethods() 吗?或者我是否必须遍历公共(public)接口(interface)/父类(super class)并在那里调用 getDeclaredMethods

最佳答案

这个有效:

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class Ex
{
public static void main(String[] args) throws Exception
{
final String methodName = "getFooValue";
Object foo = new FooImpl();
Class<?> c = foo.getClass();
Method m = c.getDeclaredMethod(methodName, null);
System.out.println(m.invoke(foo));
}
}

interface Foo
{
public int getFooValue();
}

class FooImpl implements Foo
{
@Override public int getFooValue() { return 49; }
}

关于Java:反射调用实现公共(public)接口(interface)的非公共(public)类中的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5984776/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com