2010-06-03 93 views
60

C#属性(我的意思是获取和设置方法)是一个非常有用的功能。 java是否也有类似于C#属性的东西。我的意思是,我们如何在Java的实现类似下面的C#代码:java有一些类似于C#属性的东西吗?

public string Name 
{ 
    get 
    { 
     return name; 
    } 

    set 
    { 
     name = value; 
    } 
} 

预先感谢您

+2

见[吸气剂/在Java setter方法](http://stackoverflow.com/questions/875033/getters-setters-in-java) – 2010-06-03 04:02:45

+0

另请参阅CodePorting C#2Java Cloud-App http://codeporting.com/blog/csharp-to-java-conversion/archive/2012/05/09/migrating-c-properties-to-java-using-codeporting- c2java.html在将C#代码移植到java时自动将C#属性转换为java。 – 2012-05-10 02:13:02

+0

实际上,你可以省略get和set前缀,并且像setter的getter和public void name(String val){...}那样使用public String name(){...}。 “set”和“get”是常规的,但它非常明显,当你写name(“Lem”)并获得String n = name(); – 2015-01-28 03:27:17

回答

68

没有,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; } 
} 
+43

应该清楚的是,这些getter/setter方法不是单独的结构,而是使用华丽的语法,如C#中的属性。相反,它们只是我们碰巧命名的普通方法getName()和setName(),并按照约定而不是通过专用的语言结构作为属性来执行它们。 – 2010-06-03 04:08:09

+3

True,getName()是setName()纯粹是按照惯例命名的。我们可以决定命名这些方法,例如,retrieveUserName()和assignUserName(),这就好了。这种惯例在Java中是惯用的,并且遵循Eclipse IDE之类的工具。 – 2010-06-03 04:14:38

+16

这不仅仅是一个约定。有一个规范要跟随Java Bean和一个使它们有用的API。 http://java.sun.com/javase/technologies/desktop/javabeans/docs/spec.html – 2010-06-03 05:01:40

3

您可以只声明一个私有变量,然后手工编写这些方法。但是,如果您使用的是Eclipse,则可以单击一个变量,选择“Source”和“Generate getters and setters”。这和C#属性一样方便。

+0

NetBeans也提供这样的自动化方法生成 – Supuhstar 2015-08-05 20:59:13

+3

我不会说它和c#一样方便,因为我倾向于重命名属性,而不是更新属性的名称,所以我必须更新两个方法和一个变量; – redsolo 2015-09-03 09:11:11

24

你可以看看Project Lombok,因为它试图从编写锅炉板Java代码中解脱出来。它可以让你要么使用@Getter和@Setter注解,这将提供getBlah()和setBlah()方法:

public class GetterSetterExample { 
    @Getter @Setter private int age = 10; 
} 

或者你也可以只使用@Data,它会自动实现你的hashCode(),等于(),toString()和getter方法,对非决赛领域制定者一起:我已经与该项目发现

@Data public class DataExample { 
    private String name; 
} 

问题,然而,这一切都有点巫术,它可以是倒胃口,并且你必须安装一个eclipse(或者什么)插件才能使自动编译工作。

+10

还有一个问题是,如果你使用Lombok,那么你不再编写可移植的Java代码。 C#:Thing.Number + = 1 的Java:Thing.setNumber(Thing.getNumber()+ 1) – 2010-07-07 18:05:20

13

属性不仅方便以书面getterssetters封装在一个单位而言,也是他们在该点提供了良好的语法的电话。

Window.Title = "New"; //which looks natural 

,同时用getterssetters它通常是

Window.setTitle("New"); 
+20

它做的是这样一个增量更糟在语法上。 – 2013-09-12 06:18:16

+3

这不回答这个问题,而只是说明差异 – Supuhstar 2015-08-05 20:56:30

+0

那么如果你只是在java中使用公共字段,那么你就可以像在C#中那样做Window.Title =“New”,而不需要属性。我从来没有在C#中理解过他们的观点,但我仍然使用它们,因为它们很方便。 – ozzy432836 2016-12-16 00:02:23

相关问题