在C#中,您可以使用属性使数据字段可公开访问(允许用户直接访问它),同时保留在直接访问的字段上执行数据验证的功能。 Java有类似的东西吗?对于Instance,假设存在一个带有以下实现的C#类(见下文):
public class newInt{
public newInt(){...}
public int x{
get{ return this.x }
set{ this.x = isValid(value) }
}
}
private static int isValid(int value){...}
类中的这个定义允许用户在从中检索值并为其赋值时“自然地”使用数据字段“x”。以下是它在main中的使用方法。
public class Test{
public static void main(String[] args){
newInt a = new newInt();
a.x = 50;
int b = a.x;
}
}
问题是...... java也可以这样做吗?如果是这样,它叫什么?
答案 0 :(得分:20)
没有
这就是为什么Java有getter / setter。
在C#中,您通常会有以下内容:
public class SomeObject
{
private string _title = "";
public string Title { get { return _title; } set { _title = value; } }
}
// Or with Auto-Properties
public class SomeObjectAutoProperties
{
public string Title { get; set; }
}
Java getter / setter等价物将是:
public class SomeObject
{
private String _title = "";
public string getTitle() { return _title; }
public void setTitle(String value) { _title = value; }
}
答案 1 :(得分:4)
不,你会使用getter和setter方法。这是一个Java惯例。
public class newInt {
public newInt() {...}
private int _x = 0;
public int getX() {
return this._x;
}
public void setX(int x) {
this._x = isValid(x);
}
}
答案 2 :(得分:4)
有Java平台,还有Java语言。
Java语言不支持属性(可能永远不会),但是您不必使用Java语言来使用Java平台(就像您不需要坚持使用C#一样) .NET平台)。
检查:
还有很多其他人。
答案 3 :(得分:2)
没有。 Java没有属性。 Java习语是使用mutator / accessor(getter / setter)。尽管很多人都赞成添加它们,但它们不太可能包含在下一个版本中(Java 7)。
奇怪的是,JavaFX具有属性。
请记住,当Java诞生时,它从C ++中借鉴了很多想法。因此,一些语法和习语与该语言非常相似。
答案 4 :(得分:1)
不,它没有。
我真的有一点问题要理解这个C#属性,因为,我认为其中一条规则是尽可能少地执行代码,因为它们已经公开,为什么不使用公共属性代替?
所以,你的Java等价物(可能很难看)将是:
public class NewInt { // In Java class names start with uppercase by convention
public int x;
}
你用它就像:
NewInt ni = new NewInt();
ni.x = 50;
int b = ni.x;
我肯定有一些东西是肯定的,但是,大多数时候这样做(顺便说一下,我从不编码:P)
<强>顺便说一句强>
我真的不喜欢getter和setter,但我接受它们作为Java约定的一部分。
我只是希望他们使用它:
public class NewInt {
private int x;
public int x(){
return this.x;
}
public void x(int value ) {
this.x=value;
}
}
所以用法一直是:
NewInt a = new NewInt();
a.x(10);
int b = a.x();
可能在下一个Java生活中。