java - Objective-C 方法重载

标签 java iphone objective-c ios oop

我对 Objective-C 方法重载有疑问。 Java 支持使用相同名称相同数量不同类型的参数 的方法重载。但是当我尝试在 Objective-C 中做类似的声明时,它会抛出错误重复声明方法。考虑以下代码,

/* Java */

int add(int i, int j);
int add(int i, int j, int k); // Accepted
float add(float i, float j); // Accepted

/* Objective-C */

- (int)add:(int)i and:(int)j;
- (int)add:(int)i and:(int)j and:(int)k; // Accepted
- (float)add:(float)i and:(float)j; // Throws error

为什么 Objective-C 不支持这个?有替代方案吗?

最佳答案

Objective-C 根本不支持它。它在普通的旧 C 中不受支持,因此 Objective-C 同样没有添加方法重载也就不足为奇了。为清楚起见,这有时可能很好。通常,解决这个问题的方法是在函数名称中包含一些关于参数的信息。例如:

- (int) addInt:(int)i toInt:(int)j;
- (int) addInt:(int)i toInt:(int)j andInt:(int)k;
- (float) addFloat:(float)i toFloat:(float)j;

关于java - Objective-C 方法重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4954359/

相关文章:

iphone - 如何在 Xcode 中设置线程特定断点?

ios - iPhone 应用程序包含导航栏和选项卡栏。我从什么开始创建我的项目、SingleView 应用程序或基于选项卡栏的应用程序?

ios - 无法通过其标签更新 UISlider 值

java - 在 Vaadin 应用程序中使用 HTML 模板

java - 如何使用maven运行derby ij交互式SQL脚本工具

java - 为什么此方法引用在运行时失败但相应的 lambda 调用却没有?

iphone - 如何在 UI Web View 中打开 UITextView URL?

iphone - 主线程的 NSRunLoop 在辅助线程中被引用

iphone - 锁定手机后 AsyncUDPSocket 管道破裂,应用程序在后台暂停

java - 热部署 HTML 模板会在汉字位置生成问号 - 仅在 CentOS 上