当前位置: 首页 > 面试题库 >

Java相当于Cocoa委托/ Objective-C非正式协议?

寿子轩
2023-03-14
问题内容

Java相当于Cocoa委托的代表?

(我知道我可以将一个接口传递给一个类,并让该类调用适当的方法,但是我想知道是否还有其他方法可以实现更接近于Cocoa / Objective-
C的非正式协议的东西)


问题答案:

简短的答案是,Java中没有什么比您想的要近的了,但还有其他选择。委托模式并不难实现,只是不像使用Objective-C那样方便。

“非正式协议”在Objective-C中起作用的原因是该语言支持 category
,它允许您将方法添加到现有类中,而无需对其进行子类化,甚至无需访问源代码。因此,大多数非正式协议都是NSObject上的一个类别。在Java中这显然是不可能的。

Objective-C 2.0选择@Optional协议方法,这是一种更加简洁的抽象方法,并且是新代码的首选方法,但与Java中的等效方法相比更是如此。

老实说,最灵活的方法是定义一个委托协议,然后让类实现所有方法。(对于像Eclipse这样的现代IDE,这是微不足道的。)许多Java接口都有一个随附的适配器类,这是一种通用方法,不需要用户实现很多空方法,但是它限制了继承,这使代码设计变得不灵活。
。(Josh Bloch在他的“ Effective Java”一书中对此进行了论述。)我的建议是仅首先提供一个接口,然后在确实需要时添加适配器。

无论您做什么,都要避免抛出UnsupportedOperationException“未实现”的方法。这将强制委托类处理应为可选方法的异常。正确的方法是实现不执行任何操作,返回默认值等的方法。对于没有空返回类型的方法,这些值应有据可查。



 类似资料:
  • 我熟悉在Android中使用AsyncTask:创建一个子类,在子类的实例上调用execute,在UI线程或主线程上调用onPostExecute。iOS中的等价物是什么?

  • 主要内容:声明委托,实例化委托,多播委托(合并委托)C# 中的委托(Delegate)类似于 C 或 C++ 中的函数指针,是一种引用类型,表示对具有特定参数列表和返回类型的方法的引用。委托特别适用于实现事件和回调方法,所有的委托都派生自 System.Delegate 类。在实例化委托时,可以将委托的实例与具有相同返回值类型的方法相关联,这样就可以通过委托来调用方法。另外,使用委托还可以将方法作为参数传递给其他方法, 委托具有以下特点: 委托类似

  • 成员变量应该是 @private 小技巧 成员变量应该声明为 @private @interface MyClass : NSObject { @private id myInstanceVariable_; } // public accessors, setter takes ownership - (id)myInstanceVariable; - (void)setMyInstanc

  • Objective-C允许定义协议,声明预期用于特定情况的方法。 协议在符合协议的类中实现。 一个简单的例子是网络处理类,它将具有一个协议,其中包含委托方法等方法,当网络URL提取操作结束,就会调用类。 协议的语法如下所示 - 关键字下的方法必须在符合协议的类中实现,并且关键字下的方法是可选的。 以下是符合协议的类的语法 - 的任何实例不仅会响应接口中特定声明的方法,而且还会为中的所需方法提供实现

  • 问题内容: 从Java世界进入C#,是否有等效的HashMap?如果没有,您会推荐什么? 问题答案: 可能是最接近的。实现接口(类似于Java的接口)。 您应该注意一些明显的区别: 添加/获取项目 Java的HashMap具有用于设置/获取项目的和方法 C#的词典使用索引来设置/获取项目 键 Java 允许空键 如果您尝试添加空键,.NET会引发 添加重复密钥 Java 将用新值替换现有值。 如果

  • C# 中的委托类似于 C 或 C++ 中指向函数的指针。委托表示引用某个方法的引用类型变量,运行时可以更改引用对象。 特别地,委托可以用于处理事件或回调函数。并且,所有的委托类都是从 System.Delegate 类继承而来。 声明委托 声明委托时,需要定义能够被委托所引用的方法,任意委托可以引用与该委托拥有相同签名的方法。如: public delegate int MyDelegate (s