是否完全违反Java方式来创建类似对象的结构?
class SomeData1 {
public int x;
public int y;
}
Run Code Online (Sandbox Code Playgroud)
我可以看到一个带有访问器和mutator的类更像Java.
class SomeData2 {
int getX();
void setX(int x);
int getY();
void setY(int y);
private int x;
private int y;
}
Run Code Online (Sandbox Code Playgroud)
第一个例子中的类是符号方便的.
// a function in a class
public int f(SomeData1 d) {
return (3 * d.x) / d.y;
}
Run Code Online (Sandbox Code Playgroud)
这不方便.
// a function in a class
public int f(SomeData2 d) {
return (3 * d.getX()) / d.getY();
}
Run Code Online (Sandbox Code Playgroud) 可能重复:
Java中缺少属性语法
请参阅以下情况:
class Test extends Object {
private int x;
public getX() {return x;}
public setX(int _x) {x = _x;}
}
Run Code Online (Sandbox Code Playgroud)
如你所见,没什么特别的.但是,我想知道是否可以保持"私有x"的方式,使用该类的人不需要使用getX(),换句话说,如果我可以映射一些自动调用的变量得到并设定.
像德尔福的"财产"之类的东西.它可以避免在复杂表达式中使用setX()和getX(),并且可以简化对谁读取表达式的理解.
例如,假设可以使用另一个标识符xx和yy来代替get和set方法.看到:
import Test;
public static void main(String[] args) {
new Test() {
setX(10);
setY(20);
int z = getX() * getY() + (getY() * getY());
System.out.println("%d", z);
}
// would be like this
new Test() {
xx = 10;
yy = 20;
int z = xx * yy + (yy * yy); // xx would access the …
Run Code Online (Sandbox Code Playgroud) 从两天前开始学习objective-c的开发人员,我不明白以下两种方法之间的区别:
1.
@interface Person : NSObject
@property NSString *firstName;
@property NSString *lastName;
@end
Run Code Online (Sandbox Code Playgroud)
2.
@interface Person : NSObject{
NSString *firstName;
NSString *lastName;
}
@end
Run Code Online (Sandbox Code Playgroud)
使用Java语言,我们定义了两个字符串字段:
class Person extends Object{
(public/private/protected) String firstName;
(public/private/protected) String lastName;
}
Run Code Online (Sandbox Code Playgroud)
我想知道哪一个(1到2之间)与上面的Java代码有相同的含义.
非常感谢@iamyogish @ Popeye,如果我的答案是对的,我会纠正你们两个.阅读完电子书:Objective-C 2.0 Essentials后,我了解到(如果不对,请告诉我.):
@interface Person : NSObject
@property NSString *firstName;
@property NSString *lastName;
@end
Run Code Online (Sandbox Code Playgroud)
这相当于Java代码:
class Person extends Object{
private String firstName;
private String lastName;//In fact:private should be protected
//setter and getter.
//you can use ecplise tool to generate setter/getter method …
Run Code Online (Sandbox Code Playgroud)