尝试处理"回调接口"。我理解的概念除了以下
之外有意义//FromSomeClass1
MyInterface conect;
public void setInterface(MyInterface myInter)
{
this.conect=myInter;
}
interface MyInterface
{
public void update(String str);
}
(模糊从这里开始) 所以当另一个班级试图
时//FromSomeClass2 implements MyInterface
...onCreate()
{
SomeClass1 newC = new SomeClass1()
newC.setInterface(this) ;
}
update(String str){
....code
}
这不起作用,因为我传递给一个新对象?除非我制作" conect" Class1静态中的变量(好主意坏主意......后果???)
将对象传递回" setInterface"的正确方法是什么?方法。
希望有意义,谢谢你。
P.S。 对于那些希望对回调这个link will help.
有良好理解的人答案 0 :(得分:2)
考虑一个示例Animal
接口,其中包含一个says(String)
回调,
interface Animal {
public void says(String msg);
}
接下来,让我们添加一个使用Animal
界面说出某事的类 -
class Say {
public void say(Animal animal) {
animal.says("Bawk");
}
}
现在让我们实现两个不同的Animal
(s) - 我们将有一个Cow
类和一个Sheep
类,
class Cow implements Animal {
public void says(String msg) {
System.out.printf("%s, I mean moo!%n", msg);
}
}
class Sheep implements Animal {
public void says(String msg) {
System.out.printf("%s, I mean baah!%n", msg);
}
}
最后,为了演示我们在上面定义的回调方法 -
public static void main(String[] args) {
Say say = new Say();
say.say(new Cow());
say.say(new Sheep());
}
输出
Bawk, I mean moo!
Bawk, I mean baah!
答案 1 :(得分:0)
这不是你需要让它静止。我的意思是,您可以在SomeClass1中创建所有内容并通过调用静态方法SomeClass1.setInterface(this)来创建客户端寄存器 我不会建议那么强硬。这是代码的一个例子:
import java.util.HashSet;
import java.util.Set;
public class CallbackExample {
interface MyInterface {
public void update(String str);
}
static class SomeClass1 {
private Set<MyInterface> connects = new HashSet<MyInterface>();
public void register(MyInterface myInter) {
this.connects.add(myInter);
}
public void doWork(String someParam) {
for (MyInterface myInterface : connects) {
myInterface.update(someParam);
}
}
}
static class SomeClass2 implements MyInterface {
public void onCreate(SomeClass1 caller) {
caller.register(this);
}
@Override
public void update(String str) {
System.out.println("Doing some logic in update for " + str);
}
}
public static void main(String[] args) {
// Caller and callback creation are decoupled
SomeClass1 caller = new SomeClass1();
SomeClass2 callback = new SomeClass2();
// alternative 1. Preferred
caller.register(callback);
// alternative 2. Fallowing your example
callback.onCreate(caller);
caller.doWork("param1");
}
}
答案 2 :(得分:0)
使用回调的一个很好的例子是android-async-http
库。要发出HTTP请求,可以调用方法并传递请求的详细信息以及实现某个回调接口的对象。请求方法立即返回,但在请求完成后,库的工作线程在主线程中将调用设置为您提供的回调对象上的方法。