我理解这个问题与其他人询问Java Properties类似,这些问题的答案似乎是“不,你必须使用getter / setters”。
我搜索了类似C#的Java属性,但到目前为止只发现了一个“命中”。而且我不确定它是属性还是其他东西。
Reading the Java Tutorial,我偶然发现了一些文字和代码(**强调并评论我的):
Finally, you can use the built-in **length property** to determine the
size of any array. The code:
//notice lack of brackets after anArray.length :
System.out.println(anArray.length);
will print the array's size to standard output.
由于Array
具有length
属性,Java 确实具有属性,对吧?
有人可以指出一些关于它们的文档吗?
答案 0 :(得分:2)
这实际上取决于您使用的定义。在不使用括号的情况下访问某些类的数据是“属性”的一个非常弱的定义。您可以将任何类/实例成员字段设置为公共,从而无需使用方法即可访问它。
没有使它像C#属性一样,你可以添加自定义逻辑来获取和设置在该字段上的完成情况!你直接读/写变量。数组的length
字段不可写,实际上是不可变的,所以它不是可怕的样式。但是其他暴露其字段的类遇到了麻烦,例如Point
和Dimension
。
答案 1 :(得分:1)
没有。没有关于它们的文档。不像C#,Groovy等那样真正的属性
JavaBean规范尽可能接近,这更多地与满足工具需求有关;它仍然只是吸气剂,制定者和命名惯例。
“长度”有些异常,以及有关如何实现数组的其他内容。
答案 2 :(得分:1)
Java对象可以具有属性,您可以将其视为一种属性,并且它们也可以具有方法。但是,C#领域中的“属性”意味着特定的东西,而Java则没有。
当然,Java可以使用其他功能模仿它们。
答案 3 :(得分:1)
在Java中,公共成员变量可以被视为属性,但它们只是简单的属性;没有办法提供getter / setter方法来拦截他们的读/写。例如:
class Foo {
public String name;
}
Foo f = new Foo();
f.name = "Alice";
f.name; // "Alice"
只要您提供具有赋值(或默认值)的构造函数,您也可以将它们设置为“只读”:
class Bar {
public final String name;
public Bar(String name) { this.name = name; }
}
Bar b = new Bar("Bob");
b.name; // "Bob"
b.name = "Carol"; // Compile Error: cannot assign to final field.
答案 4 :(得分:1)
没有
Java使用JavaBeans规范(粗略地说:getter和setter)来实现这一目标。
答案 5 :(得分:1)
Java原始对象有一些你可能认为是“属性”的东西,因为它们被指定为variableName.someName
而不是variableName.someName()
。 length
(对于一个数组)是一个(也是我目前唯一能想到的)。然而,在一些手法中,它们在规范中被称为“字段”,即使它们没有在所有类似字段中实现。
它们都是只读的。