C#属性(我的意思是获取和设置方法)是一个非常有用的功能。 java是否也有类似于C#属性的东西。我的意思是,我们如何在Java的实现类似下面的C#代码:java有一些类似于C#属性的东西吗?
public string Name
{
get
{
return name;
}
set
{
name = value;
}
}
预先感谢您
C#属性(我的意思是获取和设置方法)是一个非常有用的功能。 java是否也有类似于C#属性的东西。我的意思是,我们如何在Java的实现类似下面的C#代码:java有一些类似于C#属性的东西吗?
public string Name
{
get
{
return name;
}
set
{
name = value;
}
}
预先感谢您
没有,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; }
}
应该清楚的是,这些getter/setter方法不是单独的结构,而是使用华丽的语法,如C#中的属性。相反,它们只是我们碰巧命名的普通方法getName()和setName(),并按照约定而不是通过专用的语言结构作为属性来执行它们。 – 2010-06-03 04:08:09
True,getName()是setName()纯粹是按照惯例命名的。我们可以决定命名这些方法,例如,retrieveUserName()和assignUserName(),这就好了。这种惯例在Java中是惯用的,并且遵循Eclipse IDE之类的工具。 – 2010-06-03 04:14:38
这不仅仅是一个约定。有一个规范要跟随Java Bean和一个使它们有用的API。 http://java.sun.com/javase/technologies/desktop/javabeans/docs/spec.html – 2010-06-03 05:01:40
你可以看看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(或者什么)插件才能使自动编译工作。
还有一个问题是,如果你使用Lombok,那么你不再编写可移植的Java代码。 C#:Thing.Number + = 1 的Java:Thing.setNumber(Thing.getNumber()+ 1) – 2010-07-07 18:05:20
有人建议为Java的属性(和事件)添加类似C#的支持,但是看起来下一版本的Java(Java 7)会拒绝它。
参见:
属性不仅方便以书面getters
和setters
封装在一个单位而言,也是他们在该点提供了良好的语法的电话。
Window.Title = "New"; //which looks natural
,同时用getters
和setters
它通常是
Window.setTitle("New");
它做的是这样一个增量更糟在语法上。 – 2013-09-12 06:18:16
这不回答这个问题,而只是说明差异 – Supuhstar 2015-08-05 20:56:30
那么如果你只是在java中使用公共字段,那么你就可以像在C#中那样做Window.Title =“New”,而不需要属性。我从来没有在C#中理解过他们的观点,但我仍然使用它们,因为它们很方便。 – ozzy432836 2016-12-16 00:02:23
见[吸气剂/在Java setter方法](http://stackoverflow.com/questions/875033/getters-setters-in-java) – 2010-06-03 04:02:45
另请参阅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
实际上,你可以省略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