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

tyr*_*302 18 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){...}
Run Code Online (Sandbox Code Playgroud)

类中的这个定义允许用户在从中检索值并为其赋值时"自然地"使用数据字段'x'.以下是它将如何在主要使用.

public class Test{

    public static void main(String[] args){

        newInt a = new newInt();
        a.x = 50;

        int b = a.x;
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是...... java也可以这样做吗?如果是这样,它叫什么?

Jus*_*ner 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; }
}
Run Code Online (Sandbox Code Playgroud)

Java getter/setter等价物将是:

public class SomeObject
{
    private String _title = "";

    public string getTitle() { return _title; }

    public void setTitle(String value) { _title = value; }
}
Run Code Online (Sandbox Code Playgroud)

  • 在现代C#中,你更有可能拥有`public string Title {get; 组; }`:) (15认同)
  • @Jon非常真实.我考虑使用自动属性,但我想显示支持私有字段,所以有一个Java模拟. (5认同)
  • @Oscar - 因为如果您使用自动属性,您可以稍后在发现需要时添加验证。如果您使用公共字段,那将是一个重大变化。 (2认同)
  • @Oscar,这里有[一堆很好的问题和答案](http://stackoverflow.com/questions/1180860/c-public-fields-versus-automatic-properties/1180870#1180870).一些原因:你不能数据绑定到字段,将变量更改为属性是一个重大改变,如果你改变主意,反射与字段以不同的方式与属性交互,并且(最重要的是?)字段可以不是界面的一部分. (2认同)
  • @Justin-我不喜欢使用公共领域的概念,但是这似乎不是一个重大的改变;访问公共字段或相同名称的属性将具有相同的语法。 (2认同)

Fáb*_*sta 6

有 Java 平台,还有 Java 语言。

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

查看:

还有许多其他人。