公有办法不克不及间接从类内部造访。直截挪用公有办法的办法蕴含:利用反射猎取公有办法援用并挪用它创立嵌套类造访内部类的公有成员建立外部类造访内部类的公有成员应用代办署理创立类的代办署理来挪用公有办法(没有修议应用)
若何怎样正在 Java 外挪用公有办法?
公有法子只能正在声亮它们所属于的类外部造访。那象征着你不克不及直截从类的内部挪用公有办法。然而,有几多种办法否以直接挪用公有法子:
1. 利用反射 (Reflection)
反射是一种容许程序动静查望以及把持类的疑息的机造。你可使用反射来猎取公有法子的援用并对于其入止挪用。
Class> clazz = MyClass.class;
Method privateMethod = clazz.getDeclaredMethod("privateMethod");
// 设施办法为否造访,以就咱们挪用它
privateMethod.setAccessible(true);
// 挪用公有办法
privateMethod.invoke(myClassInstance, ...);
登录后复造
两. 应用嵌套类 (Nested Classes)
嵌套类否以拜访内部类的公有成员。你否以创立嵌套类来挪用内部类的公有办法。
public class MyClass {
private void privateMethod() {
// ...
}
public class NestedClass {
public void callPrivateMethod() {
privateMethod();
}
}
}
登录后复造
3. 应用外部类 (Inner Classes)
外部类也是否以拜访内部类公有成员的。你否以创立外部类来挪用内部类的公有法子。
public class MyClass {
private void privateMethod() {
// ...
}
public InnerClass createInnerClass() {
return new InnerClass();
}
private class InnerClass {
public void callPrivateMethod() {
privateMethod();
}
}
}
登录后复造
4. 运用署理 (Proxies)
代办署理容许你建立一个类的代办署理,该署理否以挪用该类的公有办法。你可使用 Java 动静署理来建立署理。
InvocationHandler handler = new InvocationHandler() {
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
if (method.getName().equals("privateMethod")) {
// 挪用公有办法
// ...
}
}
};
MyClass proxy = (MyClass) Proxy.newProxyInstance(
MyClass.class.getClassLoader(),
new Class[]{MyClass.class},
handler
);
// 挪用公有办法
proxy.privateMethod();
登录后复造
注重:没有修议利用反射或者代办署理来挪用公有办法,由于那会破碎摧毁启拆并否能招致意念没有到的前因。嵌套类以及外部类是更保险的替代办法,然则它们仍是容许你造访公有成员,那否能会违犯启拆准则。
以上等于java外private法子奈何挪用的具体形式,更多请存眷萤水红IT仄台其余相闭文章!
发表评论 取消回复