技术领域
[0001] 本公开涉及计算机
软件开发领域,尤其涉及一种静态方法修改非静态对象的方法。
背景技术
[0002] 传统方案中静态方法仅仅能够
访问全局的静态变量或局部变量,无法访问非静态的全局变量,这样会导致无法通过类的方式直接调用或修改非静态的变量内容,但是在开发过程中对非静态的内容修改是常用的需求,因此传统方案没有很好的策略对该问题给予一个很好的解决方案。
[0003] 例如,在软件开发过程中需要缓存一些用户的信息,如果直接使用static静态的变量来对该信息进行缓存处理,则很容易导致用户的信息直接通过class类被其他对象获取到,这样就降低了用户信息的安全性。为了能够提高为了提高用户信息的安全性,同时又能够去修改和读取全局唯一的static静态的用户的信息,本公开设计了一种静态方法修改非静态对象的方法。
发明内容
[0004] 针对现有的技术问题,本公开设计了一种静态方法修改非静态对象的方法,通过这种设计能够有效地提升对非静态全局对象访问的便捷性,同时,能够有效地对相应的用户信息进行保护,极大地解决了传统方案中的缺点。
[0005] 本公开的一个方面提供了一种静态方法修改非静态变量的方法,包括:定义setIfo静态函数和getInfo静态函数,setIfo静态函数用于后续修改非静态变量info的内容,setIfo静态函数用于后续获取非静态变量info的内容;定义setIfoImp非静态函数和getInfoImp非静态函数,setIfoImp非静态函数用于对非静态变量info进行写操作,getInfoImp非静态函数用于对非静态变量info进行读操作;定义getInfoClass函数,用于获取mInfoClass对象,setIfo静态函数和getInfo静态函数通过mInfoClass对象间接调用setIfoImp非静态函数和getInfoImp非静态函数;实现setIfo函数,调用所述getInfoClass函数获取mInfoClass对象,然后通过mInfoClass对象调用setIfoImp函数将静态变量info内容存储到非静态变量info中;在实现getInfo函数时,调用getInfoClass函数获取mInfoClass对象,然后通过mInfoClass对象调用getIfoImp函数获取非静态变量info内容。
[0006] 可选地,非静态变量info的访问权限设置为private私有类型,用于保护所述非静态全局变量info的内容。
[0007] 可选地,setIfoImp非静态函数和getInfoImp非静态函数定义为public公有类型。
[0008] 可选地,getInfoClass函数为private私有类型,且为static静态类型。
[0009] 可选地,在所述操作S4中,通过所述mInfoClass对象调用setIfoImp函数将静态变量info内容存储到非静态变量info中,包括:判断所述静态变量info是否为空,如果为空,则终止所述setIfo函数的执行,如果不为空,则判断所述静态变量info的内容是否为空字符串,如果为空,则终止所述setIfo函数的执行,如果不为空,则通过所述mInfoClass对象调用setIfoImp函数将所述静态变量info内容存储到非静态变量info中。
[0010] 本公开的另一个方面提供了一种
电子设备,包括:处理器和
存储器,其中,存储器存储有计算机可执行程序,该程序在被处理器执行时,使得处理器执行:定义setIfo静态函数和getInfo静态函数,setIfo静态函数用于后续修改非静态变量info的内容,setIfo静态函数用于后续获取非静态变量info的内容;定义setIfoImp非静态函数和getInfoImp非静态函数,setIfoImp非静态函数用于对非静态变量info进行写操作,getInfoImp非静态函数用于对非静态变量info进行读操作;定义getInfoClass函数,用于获取mInfoClass对象,setIfo静态函数和getInfo静态函数通过mInfoClass对象间接调用setIfoImp非静态函数和getInfoImp非静态函数;实现setIfo函数,调用所述getInfoClass函数获取mInfoClass对象,然后通过mInfoClass对象调用setIfoImp函数将静态变量info内容存储到非静态变量info中;在实现getInfo函数时,调用getInfoClass函数获取mInfoClass对象,然后通过mInfoClass对象调用getIfoImp函数获取非静态变量info内容。
[0011] 可选地,存储器中存储的非静态全局变量info的访问权限设置为private私有类型,用于保护所述非静态全局变量info的内容。
[0012] 可选地,存储器中存储的setIfoImp和getInfoImp非静态函数定义为public公有类型。
[0013] 可选地,存储器中存储的getInfoClass函数为private私有类型,且为static静态类型。
[0014] 可选地,在所述操作S4中,通过所述mInfoClass对象调用setIfoImp函数将静态变量info内容存储到非静态变量info中,包括:判断所述静态变量info是否为空,如果为空,则终止所述setIfo函数的执行,如果不为空,则判断所述静态变量info的内容是否为空字符串,如果为空,则终止所述setIfo函数的执行,如果不为空,则通过所述mInfoClass对象调用setIfoImp函数将所述静态变量info内容存储到非静态变量info中。
附图说明
[0015] 为了更完整地理解本公开及其优势,现在将参考结合附图的以下描述,其中:
[0016] 图1示意性示出了本公开
实施例提供的静态方法修改非静态变量的方法的
流程图。
[0017] 图2示意性示出了根据本公开的具有静态方法修改非静态变量功能的电子设备的
框图。
具体实施方式
[0018] 以下,将参照附图来描述本公开的实施例。但是应该理解,这些描述只是示例性的,而并非要限制本公开的范围。在下面的详细描述中,为便于解释,阐述了许多具体的细节以提供对本公开实施例的全面理解。然而,明显地,一个或多个实施例在没有这些具体细节的情况下也可以被实施。此外,在以下说明中,省略了对公知结构和技术的描述,以避免不必要地混淆本公开的概念。
[0019] 在此使用的术语仅仅是为了描述具体实施例,而并非意在限制本公开。在此使用的术语“包括”、“包含”等表明了所述特征、步骤、操作和/或部件的存在,但是并不排除存在或添加一个或多个其他特征、步骤、操作或部件。
[0020] 在使用类似于“A、B或C等中至少一个”这样的表述的情况下,一般来说应该按照本领域技术人员通常理解该表述的含义来予以解释(例如,“具有A、B或C中至少一个的系统”应包括但不限于单独具有A、单独具有B、单独具有C、具有A和B、具有A和C、具有B和C、和/或具有A、B、C的系统等)。本领域技术人员还应理解,实质上任意表示两个或更多可选项目的转折连词和/或短语,无论是在
说明书、
权利要求书还是附图中,都应被理解为给出了包括这些项目之一、这些项目任一方、或两个项目的可能性。例如,短语“A或B”应当被理解为包括“A”或“B”、或“A和B”的可能性。
[0021] 附图中示出了一些方框图和/或流程图。应理解,方框图和/或流程图中的一些方框或其组合可以由
计算机程序指令来实现。这些计算机程序指令可以提供给通用计算机、专用计算机或其他可编程
数据处理装置的处理器,从而这些指令在由该处理器执行时可以创建用于实现这些方框图和/或流程图中所说明的功能/操作的装置。
[0022] 因此,本公开的技术可以
硬件和/或软件(包括
固件、微代码等)的形式来实现。另外,本公开的技术可以采取存储有指令的计算机可读介质上的计算机程序产品的形式,该计算机程序产品可供指令执行系统使用或者结合指令执行系统使用。在本公开的上下文中,计算机可读介质可以是能够包含、存储、传送、传播或传输指令的任意介质。例如,计算机可读介质可以包括但不限于电、磁、光、电磁、红外或
半导体系统、装置、器件或传播介质。计算机可读介质的具体示例包括:磁存储装置,如磁带或
硬盘(HDD);光存储装置,如光盘(CD-ROM);存储器,如
随机存取存储器(RAM)或闪存;和/或有线/无线通信链路。
[0023] 本公开提供的方法是在InfoClass类中进行的。本公开的实施例提供了一种静态方法修改非静态变量的方法,包括:定义setIfo静态函数和getInfo静态函数,setIfo静态函数用于后续修改非静态变量info的内容,setIfo静态函数用于后续获取非静态变量info的内容;定义setIfoImp非静态函数和getInfoImp非静态函数,setIfoImp非静态函数用于对非静态变量info进行写操作,getInfoImp非静态函数用于对非静态变量info进行读操作;定义getInfoClass函数,用于获取mInfoClass对象,setIfo静态函数和getInfo静态函数通过mInfoClass对象间接调用setIfoImp和getInfoImp非静态函数;实现setIfo函数,调用所述getInfoClass函数获取mInfoClass对象,然后通过mInfoClass对象调用setIfoImp函数将静态变量info内容存储到非静态变量info中;在实现getInfo函数时,调用getInfoClass函数获取mInfoClass对象,然后通过mInfoClass对象调用getIfoImp函数获取非静态变量info内容。
[0024] 图1示意性示出了本公开实施例提供的静态方法修改非静态变量的方法的流程图。
[0025] 如图1所示,具体方法包括如下操作:
[0026] S1,定义setIfo静态函数和getInfo静态函数,setIfo静态函数用于后续修改非静态变量info的内容,setIfo静态函数用于后续获取非静态变量info的内容。
[0027] 在上述操作S1中,具体定义setIfo静态函数和getInfo静态函数方法如下所示:
[0028] public static setInfo(String info);
[0029] public static String getInfo();
[0030] 其中,上述定义的两个static静态函数都为public公有类型,这种设计使得setIfo静态函数和getInfo静态函数都具备直接被类访问的权限,即调用者可以直接通过类来调用这两个static静态函数。
[0031] 为了实现setIfo静态函数和getInfo静态函数修改和获取非静态变量的内容,采用private String info;方法定义一个非静态变量info,其中,所述的非静态变量info的访问权限被设置为private私有类型,这样可以避免该变量的信息被其他对象直接获取,对信息具有一定的保护性,提高用户信息的安全性。
[0032] 其中,setInfo静态函数中有一个String字符串类型的静态变量Info,在后续实现setInfo静态函数时,将静态变量Info的内容存储到非静态变量info中,getInfo静态函数没有设置入参参数,其返回值为一个String类型的变量,在后续实现getInfo静态函数时,将获取到的非静态变量info的内容进行返回。
[0033] S2,定义setIfoImp非静态函数和getInfoImp非静态函数,所述setIfoImp非静态函数用于对非静态变量info进行写操作,所述getInfoImp非静态函数用于对非静态变量info进行读操作。
[0034] 在上述操作S2中,定义setIfoImp非静态函数和getInfoImp非静态函数的具体方法如下所示:
[0035] public void setInfoImp(String info)
[0036] public String getInfoImp();
[0037] 其中,setIfoImp非静态函数和getInfoImp非静态函数都定义为public公有类型,这样就可以直接通过对象来调用。
[0038] 其中,在setIfoImp非静态函数实现中,首先需要判定info是否为空,具体的判定方法是info==null,如果为空,则直接通过return来终止该函数的执行,如果info不等于空,则需要判定info的内容是不是空字符串””,具体的判定方法是””.equlas(info),此处判定空字符串的方法是将””放在前面,info放在后面,这样可以有效地避免info出现null而引起的异常的可能性,如果判定条件都通过,即info不为空字符串,则通过this.info=info方式将参数的info内容复制给InfoClass对象中的非静态变量info中,其中this表示的是当前的InfoClass对象。
[0039] 同理,在getInfoImp非静态函数实现中,判定非静态变量info是否为空,如果判定不为空字符串,通过直接调用return this.info;来将当前全局非静态的变量info的内容进行返回处理。
[0040] S3,定义getInfoClass函数,用于获取mInfoClass对象,所述setIfo静态函数和getInfo静态函数通过所述mInfoClass对象间接调用所述setIfoImp非静态函数和getInfoImp非静态函数。
[0041] 在上述操作S3中,因静态方法中只能访问静态的全局变量,无法访问非静态的全局变量的,非静态的全局变量只能够通过对象来进行访问和获取,因此,可以通过获取一个对象桥接setIfo静态函数和getInfo静态函数与etIfoImp非静态函数和getInfoImp非静态函数,从而间接的对全局非静态变量进行修改和读取操作。
[0042] 采用Private static InfoClass getInfoClass();方法定义getInfoClass函数,该函数返回InfoClass类型的对象,尤其需要注意,该函数是一个private私有类型的函数,外界是无法调用该私有类型的函数,同时,该函数是一个static静态函数,这样其他静态函数能够调用该函数。
[0043] 另外,在getInfoClass函数中,通过return this;来将对象进行返回,该方法中的this表示的是当前的对象,因此,可以通过return this来返回当前正在执行的InfoClass类型的对象。
[0044] S4,在实现setIfo静态函数时,调用所述getInfoClass函数获取所述mInfoClass对象,然后通过所述mInfoClass对象调用setIfoImp函数将静态变量info内容存储到非静态变量info中。
[0045] 在上述S4操作中,首先需要对静态变量info进行判空处理,具体的判定方法是info==null,如果为空,则直接通过return来终止该函数的执行,如果info不等于空,则需要判定info的内容是不是空字符串””,具体的判定方法是””.equlas(info),此处判定空字符串的方法是将””放在前面,info放在后面,这样可以有效地避免info出现null而引起的异常的可能性,如果判定通过,即静态变量info不为空字符串,首先通过调用静态函数getInfoClass函数来返回当前类InfoClass类型的对象mInfoClass,然后,通过这个mInfoClass对象桥接setIfo静态函数与setInfoImp非静态函数之间的数据,直接通过调用setInfoImp函数来将静态函数中的内容存储到非静态全局变量info中,具体是通过调用mInfoClass.setInfoImp(info)方法来实现的。这样就实现了通过静态方法将变量info的信息存储到非静态全局变量info中的目标。
[0046] 其中,在setIfo静态函数通过mInfoClass对象调用setInfoImp函数执行时,setInfoImp函数内部对info进行了操作S2中的判空处理。
[0047] S5,在实现getInfo函数时,调用所述getInfoClass函数获取所述mInfoClass对象,然后通过所述mInfoClass对象调用getIfoImp函数获取非静态变量info内容。
[0048] 在上述操作S5中,同理操作S4,首先通过调用静态函数getInfoClass函数来返回当前类InfoClass类型的对象mInfoClass,然后,通过这个mInfoClass对象桥接getIfo静态函数与getInfoImp非静态函数之间的数据,然后通过调用mInfoClass.getInfoImp()方法将全局非静态变量info中的信息获取到,最后,通过调用return mInfoClass.getInfoImp()将获取的信息返回,这样就实现了通过静态方法来直接获取全局非静态变量info的内容信息的目标。
[0049] 通过上述实施例的设计,实现了静态方法修改非静态变量的目标。
[0050] 需要注意的是,图1所示仅为可以应用本公开实施例的场景的示例,以帮助本领域技术人员理解本公开的技术内容,但并不意味着本公开实施例不可以用于其他设备、系统、环境或场景。
[0051] 本公开提供了一种电子设备,如图2所示,该电子设备200包括处理器210和计算机可读存储介质220。该电子设备200可以执行根据图1所示的本公开实施例的方法。
[0052] 具体地,处理器210例如可以包括通用
微处理器、指令集处理器和/或相关
芯片组和/或专用微处理器(例如,专用集成
电路(ASIC)),等等。处理器210还可以包括用于缓存用途的板载存储器。处理器210可以是用于执行根据本公开实施例的方法流程的不同动作的单一处理单元或者是多个处理单元。
[0053] 计算机可读存储介质220,例如可以是能够包含、存储、传送、传播或传输指令的任意介质。例如,可读存储介质可以包括但不限于电、磁、光、电磁、红外或半导体系统、装置、器件或传播介质。可读存储介质的具体示例包括:磁存储装置,如磁带或硬盘(HDD);光存储装置,如光盘(CD-ROM);存储器,如随机存取存储器(RAM)或闪存;和/或有线/无线通信链路。
[0054] 计算机可读存储介质220可以包括计算机程序221,该计算机程序221可以包括代码/计算机可执行指令,其在由处理器210执行时使得处理器210执行根据本公开实施例的方法或其任何
变形。
[0055] 计算机程序221可被配置为具有例如包括计算机程序模
块的计算机程序代码。例如,在示例实施例中,计算机程序221中的代码可以包括至少一个程序模块,例如包括模块221A、模块221B、……。应当注意,模块的划分方式和个数并不是固定的,本领域技术人员可以根据实际情况使用合适的程序模块或程序模块组合,当这些程序模块组合被处理器210执行时,使得处理器210可以执行根据本公开实施例的方法或其任何变形。
[0056] 本公开还提供了一种计算机可读介质,该计算机可读介质可以是上述实施例中描述的设备/装置/系统中所包含的;也可以是单独存在,而未装配入该设备/装置/系统中。上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被执行时,实现根据本公开实施例的方法。
[0057] 根据本公开实施例的方法根据本公开的实施例,计算机可读介质可以是计算机可读
信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个
导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、
只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本公开中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本公开中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、
光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、有线、光缆、
射频信号等等,或者上述的任意合适的组合。
[0058] 附图中的流程图和框图,图示了按照本公开各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
[0059] 本领域技术人员可以理解,本公开的各个实施例和/或权利要求中记载的特征可以进行多种组合或/或结合,即使这样的组合或结合没有明确记载于本公开中。特别地,在不脱离本公开精神和教导的情况下,本公开的各个实施例和/或权利要求中记载的特征可以进行多种组合和/或结合。所有这些组合和/或结合均落入本公开的范围。
[0060] 尽管已经参照本公开的特定示例性实施例示出并描述了本公开,但是本领域技术人员应该理解,在不背离所附权利要求及其等同物限定的本公开的精神和范围的情况下,可以对本公开进行形式和细节上的多种改变。因此,本公开的范围不应该限于上述实施例,而是应该不仅由所附权利要求来进行确定,还由所附权利要求的等同物来进行限定。