让我们使用私有方法A
和f()
上课g()
。让课程B
拥有公开方法h
。是否可以将方法A.g
中指向A.f
的指针/委托传递给B.h
?
请考虑以下代码:
Class B
{
public B() {}
public h(/*take pointer/delegate*/)
{
//execute method from argument
}
}
Class A
{
private int x = 0;
private void g()
{
x = 5;
}
private void f()
{
B b = new B();
b.h(/*somehow pass delegate to g here*/);
}
}
调用A.f()
后,我希望A.x
为5
。可能吗?如果是这样,怎么样?
答案 0 :(得分:5)
您可以为方法创建Action
参数:
public h(Action action)
{
action();
}
然后像这样调用它:
b.h(this.g);
可能值得注意的是,Action
的通用版本表示带参数的方法。例如,Action<int>
会将任何方法与单个int
参数匹配。
答案 1 :(得分:3)
是的。
class B
{
public B()
{
}
public void h(Action func)
{
func.Invoke();
// or
func();
}
}
class A
{
private int x = 0;
private void g()
{
x = 5;
}
private void f()
{
B b = new B();
b.h(g);
}
}
答案 2 :(得分:2)
是的,有可能:
onView (withId (android.R.id.list)).check (ViewAssertions.matches (Matchers.withListSize (1)));
Here是一个小提琴,表明它有效 - 为了示范目的,我将一些私人改为公众。