它需要一种方法来调用函数,其名称存储在类似于eval的字符串中.你能帮我吗?
我正在使用Mockito 1.9.5.如何模拟受保护方法返回的内容?我有这种受保护的方法......
protected JSONObject myMethod(final String param1, final String param2)
{
…
}
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试在JUnit中执行此操作时:
final MyService mymock = Mockito.mock(MyService.class, Mockito.CALLS_REAL_METHODS);
final String pararm1 = “param1”;
Mockito.doReturn(myData).when(mymock).myMethod(param1, param2);
Run Code Online (Sandbox Code Playgroud)
在最后一行,我得到一个编译错误"方法'myMethod'不可见."我如何使用Mockito来模拟受保护的方法?如果这是答案,我愿意升级我的版本.
我曾经认为元编程涉及修改程序,并且(对于什么是反射及其为什么有用?)的一些答案,反思仅仅包括对程序的内省.但是,反射标签维基说
反射是程序在运行时可以观察和 修改自身结构和行为的过程.
反思是程序可以执行内省的过程.这种内省通常涉及在运行时观察和修改自身结构和行为的能力.从理论角度来看,反思涉及程序指令作为数据存储的事实.程序代码和数据之间的区别在于如何处理信息.因此,程序可以将自己的代码视为数据并观察或修改它们.
[强调补充]
元编程的描述是
元编程正在编写编写或操纵其他程序作为其数据的程序.
元编程很有用,因为它可以节省程序员宝贵的时间.有些语言支持元编程本身,这允许创建具有强大表现力的代码.
(我认为"写"并不意味着将源代码写入文件,因为这是代码生成.)
这会使元编程只是反射的一个子集吗?
或者这些术语是不同的,因为某些编程语言是由另一种语言元编程的,在这种情况下,元编程会发生而不是反射?(在维基百科的元编程文章中有一个未被引用的句子声称这个)
或者"反射"和"元编程"这两个术语的使用方式会有所不同,具体取决于该人使用的编程语言?
在java中,我可以使用类对象动态实例化该类型的类吗?
即我想要一些像这样的功能.
Object foo(Class type) {
// return new object of type 'type'
}
Run Code Online (Sandbox Code Playgroud) 我只是好奇,我们为什么要首先使用反射?
// Without reflection
Foo foo = new Foo();
foo.hello();
// With reflection
Class cls = Class.forName("Foo");
Object foo = cls.newInstance();
Method method = cls.getMethod("hello", null);
method.invoke(foo, null);
Run Code Online (Sandbox Code Playgroud)
我们可以简单地创建一个对象并调用类的方法,但为什么使用forName,newInstance和getMthod函数呢?
让一切变得动态?
我有一个类,我们称之为A类,它实现了Parcelable.
我有第二堂课,我们称之为B班,扩展到A班.
我的问题是:
如何将B类成员变量写入Parcel,然后将其父类(即:A类)成员变量写入Parcel(并随后将其读入)?
是否有一些漂亮的技巧,不需要重写A类的包裹代码?或者我只需要在A类中重写Parcel代码并为B类成员变量添加其他代码?
Android在API 28上增加了缺口支持,但如何在运行API 27的设备上处理它(荣誉10,华为P20等)?
我试图使用,DisplayCutoutCompat但我无法创建它的实例,因为文档没有真正指出如何创建一个.
如何创建构造函数参数值:Rect safeInsets,List<Rect> boundingRects?
我也查看了构造函数的源代码,这对我来说有点混乱:
public DisplayCutoutCompat(Rect safeInsets, List<Rect> boundingRects) {
this(SDK_INT >= 28 ? new DisplayCutout(safeInsets, boundingRects) : null);
}
Run Code Online (Sandbox Code Playgroud)
这将始终在运行API <28的设备上返回null .先感谢您.
如果@Autowired没有getter setter ,注释如何用于私有字段?春天如何进入私人领域?
Java Reflection提供了一种在运行时对Object进行内省的机制.没有第二个想法,这是一个很棒的功能,但它打破了所有的重构惯例!
File Search即使在现代IDE中也没有简单的方法(除了)以了解哪个属性被引用以及在哪里.这使得Refactorings变得更加复杂(令人厌烦!)并且容易出错.
坦率地说,不只是Reflection API; Hibernate mapping files (hbm.xml)并且JSP files都将属性称为String,当您重构属性名称时,您必须手动更改所有这些位置.
更糟糕的是,Hibernate映射文件或JSP文件中的更改会导致运行时错误.
我很想知道其他程序员如何在Java中处理这个问题.有一些工具吗?我使用Eclipse/IBM RAD作为主要开发平台.通常我们使用a constant来定义属性并尽可能地使用它,但它并不总是可行的.
我也很感兴趣其他语言如何处理这个问题!
这是8年前在这里被问到的,从那时起已经过了8年.我想再次问这个问题,看看是否有人开发了一个猴子修补的框架,工具或库.
基本上我需要它是一个java应用程序,我应用自己的补丁.由于这个项目由另一个团队维护,我希望能够保留/应用我制作的任何补丁,以及他们制作的补丁.
java ×4
reflection ×3
android ×2
androidx ×1
c++ ×1
class ×1
eval ×1
junit ×1
mocking ×1
mockito ×1
new-operator ×1
oop ×1
parcelable ×1
protected ×1
refactoring ×1
spring ×1
terminology ×1
theory ×1