Java的“属性”是否与C#中的属性相同?

时间:2010-04-23 18:33:47

标签: c# java properties

在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也可以这样做吗?如果是这样,它叫什么?

5 个答案:

答案 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生活中。