gpt4 book ai didi

android - 如何在我自己的代码中使用回调

转载 作者:太空宇宙 更新时间:2023-11-03 13:39:05 25 4
gpt4 key购买 nike

在这里我更新我的世界以包括 Canvas 大小

world.getViewPort().updateViewPortSize(width,height);

有更好的方法吗?有没有一种方法可以自动更新我的世界对象,而无需在 setSurfaceSize 方法中手动调用它,而是从我的世界类中调用它?

我猜我可以使用某种回调,但我不理解它们!

/* Callback invoked when the surface dimensions change. */
public void setSurfaceSize(int width, int height) {
// synchronized to make sure these all change atomically
synchronized (mSurfaceHolder) {
mCanvasWidth = width;
mCanvasHeight = height;
world.getViewPort().updateViewPortSize(width,height);
}
}

最佳答案

回调函数在 Java 中非常简单。实现它的方法是简单地定义一些具有单个方法 m() 的接口(interface) A,然后将类型 A 的集合添加到您的 World 类。然后,在您的 World 对象中的某个时刻,您想遍历 A 集合并在每个元素上调用方法 m()。要向您的世界添加“回调函数”,您只需定义一些实现您的接口(interface) A 的类,并将其放入您的世界类中的 A 对象集合中。例如,

public interface CallbackFunction
{
public void execute(int a, int b);
}

public class World
{
List<CallbackFunction> callbackFunctions;

public void addCallback(CallbackFunction f)
{
callbackFunctions.add(f);
}

private void updateWorld()
{
// This loop could be anywhere in your World class
for(CallbackFunction f : callbackFunctions)
{
f.execute(<some int>, <some int>);
}
}
}

然后向您的世界添加一个功能:

world.addCallback(new CallbackFunction()
{
public void execute(int a, int b)
{
// Do some stuff
}
}

我将剩下的留给您,但这应该让您很好地了解回调通常是如何在 Java 中实现的。

您也不需要存储回调函数的一般集合,您可以在 World 类中使用特定的回调函数和特定的方法。例如,您的 World 类可能有一些方法可以通过比较集合中的两个元素来对事物进行排序。要确定一个对象应该在另一个对象之前还是之后,您可以定义一个 CallbackFunction 接口(interface),该接口(interface)具有一个方法,该方法接受 2 个事物(如 int 的)并返回一个值,该值指示哪个事物应该先去。例如,

public interface CallbackForSorting
{
public int compare(int a, int b);
}


public class World
{
List<Integer> thingsToSort;

public void sortThings(CallbackForSorter sorter)
{
int result = sorter.compare(thingsToSort.get(i), thingsToSort.get(i+1));

if(result == 0) // elements are equal
if(result == -1) // thingsToSort.get(i) is "less than" thingsToSort.get(i+1)
if(result == 1) // thingsToSort.get(i) is "greater than" thingsToSort.get(i+1)
}
}

关于android - 如何在我自己的代码中使用回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2331992/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com