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