精华内容
下载资源
问答
  • 如何调用私有方法

    千次阅读 2021-03-07 14:18:15
    当不涉及到用户隐私的时候,我们调用私有方法一般都没有什么问题。在我们调用私有方法之前,我们必须要先知道你想调用的对象有哪些私有方法,和需要参数的那些方法的参数类型,和返回值的类型是多少。查看私有方法名...

    当不涉及到用户隐私的时候,我们调用私有方法一般都没有什么问题。

    在我们调用私有方法之前,我们必须要先知道你想调用的对象有哪些私有方法,和需要参数的那些方法的参数类型,和返回值的类型是多少。

    查看私有方法名,参数类型和返回值类型

    - (void)scanMethodsTwo:(Class)class {

    unsigned int outCount = 0; // unsigned int :是无符号基本整型,没有负数

    Method *methods = class_copyMethodList(class, &outCount); // 获取类的方法列表

    for (int i = 0; i < outCount; i++) {

    Method method = methods[i];

    // 获取方法名

    SEL sel = method_getName(methods[i]);

    NSLog(@"方法名==== %@", NSStringFromSelector(sel));

    // 获取参数

    char argInfo[512] = {};

    unsigned int argCount = method_getNumberOfArguments(method);

    for (int j = 0; j < argCount; j++) {

    // 参数类型

    method_getArgumentType(method, j, argInfo, 512);

    NSLog(@"参数类型=== %s", argInfo);

    memset(argInfo, '\0', strlen(argInfo));

    }

    // 获取方法返回值类型

    char retType[512] = {};

    method_getReturnType(method, retType, 512);

    NSLog(@"返回值类型=== %s", retType);

    }

    free(methods);

    }

    调用无参数方法

    当知道方法名过后,我们调用没有参数的私有方法,有两种:

    方法一:使用performSelector来调用

    [button performSelector:@selector(updateConstraints)];

    方法二:也可以使用objc_msgSend来调用,但是是有这个必须要导入#import ,#import 这两个头文件。

    ((void(*)(id,SEL))objc_msgSend)(button, @selector(updateConstraints));

    如果要使用下面这种写法,必须要在项目配置文件 -> Build Settings -> Enable Strict Checking of objc_msgSend Calls 这个字段设置为 NO, 默认为YES.

    objc_msgSend(button, @selector(updateConstraints));

    调用有参数方法

    要使用objc_msgSend来调用,并传递参数

    ((void(*)(id,SEL, CGRect))objc_msgSend)(button, @selector(setFrame:), CGRectMake(200, 100, 50, 50));

    objc_msgSend(button, @selector(setFrame:), CGRectMake(200, 100, 50, 50));

    展开全文
  • 私有方法和私有属性私有方法只能在类内部被调用,不能被对象使用私有属性只能在类内部使用,不能被对象使用私有属性只能在类内部使用,对象不能使用,但是,我们可以通过在类内部定义公有方法对私有属性进行调用或...

    私有方法和私有属性

    私有方法只能在类内部被调用,不能被对象使用

    私有属性只能在类内部使用,不能被对象使用

    私有属性只能在类内部使用,对象不能使用,但是,我们可以通过在类内部定义公有方法对私有属性进行调用或修改,然后对象在调用这个公有方法使用。

    私有属性和私有方法

    #在属性名和方法名前面加上 __class Person(object):

    def __init__(self):        # 公有属性

    self.name = "李四"

    #私有属性

    self.__age = 18

    #定义公有方法

    def show_info(self):        # 私有属性只能在类内部使用,可以通过内部公有方法修改,

    self.__age = 29

    print(self.name, self.__age)#调用私有方法

    #在类内部使用私有方法,可以通过内部公有方法调用

    result = self.__show_address()

    print( result)

    #定义私有方法

    def __show_address(self):

    return "我的家在东北"

    #定义对象,调用类person = Person()

    person.show_info()

    #测试对象调用私有属性,结果报错,对象不能使用私有属性,私有属性只能在内部使用

    #print(person.name, person.age)

    #测试对象调用私有方法,结果报错,私有方法只能在类内部使用

    #person.show_address()

    输出:李四 29

    我的家在东北

    更多学习内容,请点击Python学习网。

    展开全文
  • 如果方法接受非原始数据类型,则可以使用以下方法来调用任何类的私有方法:publicstaticObjectgenericInvokeMethod(Objectobj,StringmethodName,Object...params){intparamCount=params.length;Methodmethod;...

    如果方法接受非原始数据类型,则可以使用以下方法来调用任何类的私有方法:public static Object genericInvokeMethod(Object obj, String methodName,

    Object... params) {

    int paramCount = params.length;

    Method method;

    Object requiredObj = null;

    Class>[] classArray = new Class>[paramCount];

    for (int i = 0; i 

    classArray[i] = params[i].getClass();

    }

    try {

    method = obj.getClass().getDeclaredMethod(methodName, classArray);

    method.setAccessible(true);

    requiredObj = method.invoke(obj, params);

    } catch (NoSuchMethodException e) {

    e.printStackTrace();

    } catch (IllegalArgumentException e) {

    e.printStackTrace();

    } catch (IllegalAccessException e) {

    e.printStackTrace();

    } catch (InvocationTargetException e) {

    e.printStackTrace();

    }

    return requiredObj;

    }

    接受的参数是obj,methodName和参数。例如public class Test {private String concatString(String a, String b) {

    return (a+b);}}

    方法concatString可以作为调用Test t = new Test();

    String str = (String) genericInvokeMethod(t, "concatString", "Hello", "Mr.x");

    展开全文
  • 使用反射调用私有方法 ????获取私有方法的步骤: 1.获取目标类 2.获取目标方法 Method method=clazz.getDeclaredMethod(name);//可以调用类中的所有方法(不包括父类中继承的方法) Method method=clazz.getMethod...

    使用反射调用私有方法

    🍓获取私有方法的步骤:
    1.获取目标类
    2.获取目标方法

    Method method=clazz.getDeclaredMethod(name);//可以调用类中的所有方法(不包括父类中继承的方法)
    Method method=clazz.getMethod(name);//可以调用类中有访问权限的方法(包括父类中继承的方法)

    3.method.toGenericString()或method.toString()方法来输出方法的字符串形式

    toGenericString()
    返回描述此 Method 的字符串,包括类型参数。

    toString()
    返回描述此 Method 的字符串。

    4.使用invoke()方法调用方法
    🍓案例:
    1.创建一个Person类,写几个方法

    package yaya;
    /**
     * 创建一个Person类,写几个方法
     */
    public class Person {
        public void eat() {
            System.out.println("我在吃");
        }
        public void run() {
            System.out.println("我在跑");
        }
        //加个私有方法,用于测试
        private void eat(String name) {
            System.out.println("我是"+name+",我在吃");
        }
        public void eat(String name,int count) {
            System.out.println("我是"+name+",我在吃"+count+"只牛蛙");
        }
     
    }
    

    2.使用反射调用私有方法

    package yaya;
     
    import java.lang.reflect.Method;
     
    /**
    * 使用反射调用私有方法
    */
    public class ReflectDemo5 {
     
        public static void main(String[] args) throws Exception {
          //通过Class的静态方法forName加载Person
            Class cls=Class.forName("yaya.Person");
            //实例化对象的方法
            Object o=cls.newInstance();
            /*
             * 在类的外部通过反射调用私有方法会破坏封装性如不是必要操作或设计需求,不建议这样做。
             */
            Method m= cls.getDeclaredMethod("eat",String.class);
            //在访问私有方法前设置访问操作(不设置直接调用会报错)
            m.setAccessible(true);
            m.invoke(o,"佩奇");
             
        }
     
    }
    

    🍗注意:使用继承父类(AccessibleObject类)来的setAccessible()方法,来设置或取消访问检查,以达到访问私有对象的目的。

    展开全文
  • 我想在非常罕见的特定情况下从类外部访问私有方法和变量.我已经看到尽管使用了内省,但这是不可能的.具体案例是下一个案例:我想要这样的东西:class Console{final public static function run() {while (TRUE != ...
  • //调用私有方法package com.java.test;public class PrivateMethod{private String sayHello(String name){return "hello "+name;}}测试:package com.java.test;import java.lang.reflect.Method;public class ...
  • I have a Dummy class that has a private method called sayHello. I want to call sayHello from outside Dummy. I think it should be possible with reflection but I get an IllegalAccessException....
  • 你可以通过更改类的运行时行为从类外部调用私有方法。借助于java.lang.Class类和java.lang.reflect.Method类, 我们可以从任何其他类调用私有方法。方法类的必需方法1)public void setAccessible(boolean status)抛出...
  • 我有一个类,使用XML和反射将对象返回到另一个类。...我相信这是因为Java不会允许你访问私有方法进行反射。Element node = outerNode.item(0);String methodName = node.getAttribute("method");String objectName =...
  • } } 接下来是获取私有值name并修改,获取私有方法setName,并调用(展示实体内容用了fastjson) package serializable; import java.lang.reflect.Field; import java.lang.reflect.Method; import ...
  • Class clazz = Class.forName("xxx.xxx.xxx.peopleSelf.EvaluSoultionForYearEditHadler"); Method initData = clazz.getDeclaredMethod("initData", String....//调用私有方法需设置 Object obj = initData.invoke(cla
  • //反射机制调用私有方法 public class ReflectDemo4 { public static void main(String[] args) throws Exception { Class cls = Class.forName("reflect.Person"); Object o =cls.newInstance(); Method method=...
  • 下面这个例子在实际项目中一般都不会这么用,只是用来说明怎么通过反射修改类的私有字段的值.有一个类TestData:public class TestData {private String name = "1";public String getName() {return name;}}在运行的...
  • 我需要检查OS 2.0 – 2.3中当前连接的BT耳机(不仅仅是配对).在引入蓝牙耳机类的API版本11之前,此类功能不存在.但是在先前的API中已经存在一个名为... } 我在调用方法的行上得到了异常,但我不确定我做错了什么.
  • 1.调用外部类的私有方法及获取属性值: package org.example; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; public class checkfeflect { public static void main...
  • 在Java中调用私有方法时除了在调用之前需要设置setAccessible(true)之前,还需要注意getMethod和getDeclaredMethod调用实例:package com.jason.test;//测试类class MyTest {private void testCall() {System.out....
  • } /*** * 访问私有方法 * */ public static Object callMethod(Object instance, String methodName, Class[] classes, Object[] objects) throws NoSuchMethodException, SecurityException, ...
  • 分享给大家供大家参考,具体如下:与大多数语言一样,Python 也有私有的概念:① 私有函数不可以从它们的模块外面被调用私有方法不能够从它们的类外面被调用私有属性不能够从它们的类外面被访问与大多数的...
  • python如何访问私有方法

    千次阅读 2021-02-04 08:10:08
    python访问私有方法的方法 :通过“实例类.类名_变量名”可对私有方法进行访问。在python中,不像c#/java类语言,支持类的私有方法,这点有点像objc,虽然objc可以通过扩展extension来实现,但源于objc的运行时特性...
  • void Main() { var type = typeof(StockClass); type.Dump(); var fields=type.GetFields(BindingFlags.Instance|...//调用私有的构造函数,获得实例化对象 object obj=type.GetConstructors(BindingFlags.Inst
  • 利用Java反射机制调用类的私有方法引言来吧·展示参考链接 引言 如何调用其他类的私有方法呢? 可以利用Java的反射机制,去调用其他类的私有方法 来吧·展示 package cn.learn.stady; import java.lang.reflect....
  • 我正在尝试模拟一个进行JNDI调用私有方法。从单元测试中调用该方法时,它将引发异常^。我想模拟该方法用于测试目的。我使用了另一个问题answer中的示例代码,并且在测试通过时,似乎仍在调用底层方法。我System....
  • 我对于发射机制的了解就是它非常流氓,不顾成员变量或成员方法前的保护机制是什么,都可以访问。非常霸道!这也告诉我们开发中须谨慎使用,否则后果严重。什么访问权限都形同虚设了先是一个类文件//f.javapublic ...
  • 我有一个带有私有方法的抽象Java类MyAbstractClass. MyConcreteClass有一个具体的实现.public class MyAbstractClass {private void somePrivateMethod();}public class MyConcreteClass extends MyAbstractClass {/...
  • 那么有什么方法可以在另一个方法内部模拟私有方法调用吗?public Class MyClass {private void sendEmailNotification(Checklist Checklist){EmailService emailService = new EmailService();BaseDTO es...
  • Friend Put the magic pieces together 结语 引子 可否在C++类的外部调用类的私有方法呢?既然谈到了这个问题,当然是可以的。 问题 目标是在一个外部function中调用Widget::forbidden()这个private function。限制...
  • php在内部引用私有方法的方法:在调用【get()】方法时,在前面加上【$this】,代码为【$con = $this->get($name, $age);echo "my name is :".$name."";】。php在内部引用私有方法的方法:这段代码很简单,我想...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 564,274
精华内容 225,709
关键字:

调用私有方法