我想开始在iPhone应用程序中使用块,因为它们确实非常方便。需要将iOS中使用的块转换为Android Java代码
但是,由于所有的应用程序也必须移植到Android Java,所以我不确定这是否是一个好主意,因为我不知道如何轻松地翻译这些块。
到目前为止,将iOS移植到Android是直接的,几乎是逐行的 - 但是如何将iOS块转换为Java? (当然我不是在谈论Java块)
非常感谢!
我想开始在iPhone应用程序中使用块,因为它们确实非常方便。需要将iOS中使用的块转换为Android Java代码
但是,由于所有的应用程序也必须移植到Android Java,所以我不确定这是否是一个好主意,因为我不知道如何轻松地翻译这些块。
到目前为止,将iOS移植到Android是直接的,几乎是逐行的 - 但是如何将iOS块转换为Java? (当然我不是在谈论Java块)
非常感谢!
Java允许匿名(未命名)类。而且,他们可以扩展另一个班级。当以这种方式使用时,它们与目标C中的块类似。
您经常会看到一个定义了匿名类的实现Runnable
或类似的类。这是做了一些类似于块的事情:提供一个匿名的内联代码的定义,以便以后使用。
欲了解更多信息,请参见这里的例子: http://en.wikipedia.org/wiki/Closure_%28computer_science%29#Local_classes_.28Java.29
所以在Java中,你可以编写类似以下内容:
doMyThing(new Runnable() {
void run() {
// your 'block' code here
}
});
的方法doMyThing
可以在以后调用run方法(或者通过将你的Runnable传递给一个新的Thread对象来产生它作为一个线程。)
这里有进一步的讨论:
Limitations of Java Anonymous Classes compared to Objective-C Blocks
http://www.jondev.net/articles/Objective-C_blocks_vs_Java_Anonymous_Classes_or_Functions_(callbacks)
,所以它看起来相当于bocks - 但是有没有我看不到的一般差异? – user387184
我已更新我的答案并添加了两个方便的链接。 – occulus
超级!非常感谢你! – user387184
是的,可悲的是Java没有关闭。对于每个块,您都必须将其转换为某种回调机制。这是Java中需要的令人讨厌的样板。你必须不断地做的东西一样
button.setOnClickListener(
new View.OnClickListener() {
public void onClick(View v) {
doSomething();)
}
});
所以,你必须创建一个匿名接口,覆盖的方法,然后把你的东西在里面,当你真的希望能够做的是一样的东西:
button.onClick(doSomething(););
但正如occulus解释的那样 - 似乎匿名类可以用作块的替代 – user387184
uh @ user387184,这就是为什么我说“对于每个块,您都必须将其转换为某种回调机制“...我只是表现出Java中没有任何块是多么令人讨厌...... – LuxuryMode
这个怎么样
yourObj.passABlock(new actionBlock() {
public void action() {
//Whatever
}
});
如Android的Runnable类表示可以像上面那样执行的命令(在单独的线程中)
它基本上是使用“Command”设计模式实现的。
public interface Command {
void execute();
}
这很容易。
iOS块 - 它已关闭。所以,Java也有关闭。我为两种平台开发 - iOS & Android - 我知道 - 这是真的。
请看维基百科文章http://en.wikipedia.org/wiki/Closure_(computer_science) - 有代码示例为iOS & Android。
该页面上没有适用于Android的代码示例;单词“android”甚至不会出现在页面上。您还会注意到该页面的Java在“类似于闭包的结构”中列出,其中包含诸如“某些语言的特性模拟闭包的某些功能”以及“为Java添加更多全功能闭包而提出的一些建议” 。 – CommonsWare
无所谓,这只是一个示例如何将iOS块转换为基于Java的项目 –
请显示这样的示例,其中具有参数和上下文变量的块被移植到Java - 我没有在该页上找到任何 – user387184
快速浏览一下块的iOS做什么建议,你可以使用匿名类和注解获得的大部分功能。 –