java有类似于C#属性的东西吗?

Nim*_*gar 77 c# java properties

C#属性(我的意思是get和set方法)是一个非常有用的功能.java也有类似于C#属性的东西.我的意思是我们如何在java中实现类似下面的C#代码:

public string Name
{
    get
    {
        return name;
    }

    set
    {
        name = value;
    }
}
Run Code Online (Sandbox Code Playgroud)

先感谢您

Kev*_*nle 88

不,Java没有等价.它只有accessor和mutator方法,getter和setter方法的花哨名称.例如:

public class User {
    private String name;

    public String getName() { return this.name; }
    public void setName(String name) { this.name = name; }
}
Run Code Online (Sandbox Code Playgroud)

  • 应该清楚的是,这些getter/setter方法不是单独的构造,具有华丽的语法,例如属性在C#中.相反,它们只是普通的方法,我们碰巧命名为getName()和setName(),并通过约定而不是通过专用的语言结构将它们作为属性来执行任务. (59认同)
  • 这不仅仅是一个惯例.有一个与Java Beans一起使用的规范和一个使它们有用的API.http://java.sun.com/javase/technologies/desktop/javabeans/docs/spec.html (23认同)
  • 是的,getName()是setName()是纯粹按照惯例命名的.人们可以决定将这些方法命名为,例如,retrieveUserName()和assignUserName(),这就好了.这种约定在Java中是惯用的,Eclipse IDE之类的工具也是如此. (3认同)
  • @ChrisNava你的链接已经腐烂了. (3认同)

Ben*_*ith 27

您可以查看Project Lombok,因为它试图消除编写样板文件Java代码的痛苦.它允许您使用@Getter和@Setter注释,它将提供getBlah()和setBlah()方法:

public class GetterSetterExample {
  @Getter @Setter private int age = 10;
}
Run Code Online (Sandbox Code Playgroud)

或者你可以只使用@Data,它会自动实现你的hashCode(),equals(),toString()和getter方法,以及非final字段的setter:

@Data public class DataExample {
  private String name;
}
Run Code Online (Sandbox Code Playgroud)

然而,我在项目中发现的问题是它有点伏都,这可能是令人反感的,并且你必须安装一个eclipse(或者什么都有)插件才能使自动编译工作.

  • 另一个问题是如果你使用Lombok,那么你就不再编写可移植的Java代码了. (13认同)

小智 16

属性不仅在写入方面很方便,getters而且setters封装在一个单元中,而且它们在调用时提供了良好的语法.

Window.Title =  "New"; //which looks natural
Run Code Online (Sandbox Code Playgroud)

而与getterssetters它通常是

Window.setTitle("New");
Run Code Online (Sandbox Code Playgroud)

  • 做一些像增量更糟糕的事情:C#:Thing.Number + = 1 Java:Thing.setNumber(Thing.getNumber()+ 1) (29认同)
  • 这不回答问题,而只是描述语法上的差异. (7认同)
  • @ ozzy432836很好,就是这种情况。.您可以分配Window.Title =“ New”,对您来说这是一个变量。但是在C#中,您可以向其中添加一个约束,以告知Window.Title =“ @some invalid value”然后拒绝它。我喜欢它的C#之美。希望Java世界了解它!就像我们可以用汇编语言编写代码一样,那为什么还要开发高级语言!对我来说,我觉得Java世界对此感到很自负! (3认同)

Jes*_*per 7

有人建议向Java添加类似C#的属性(和事件)支持,但看起来这对于下一版本的Java(Java 7)是被拒绝的.

看到: