Java 是否具有与 C# 中属性工作方式相同的“属性”?

2022-09-01 18:54:40

在 C# 中,可以使用属性使数据字段可公开访问(允许用户直接访问它),同时保留对这些直接访问的字段执行数据验证的能力。Java有类似的东西吗?例如,假设存在一个具有以下实现的 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也可以做到这一点吗?如果是这样,它叫什么?


答案 1

不。

这就是为什么Java有getters/setters。

在 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; }
}

答案 2

有Java平台,有Java语言。

Java语言不支持属性(可能永远不会),但你不会被迫使用Java语言来使用Java平台(就像你不需要坚持使用C#来使用.NET平台一样)。

检查:

还有许多其他人。