ゲッター/セッターを持つJava POJOの内部プライベート変数を参照するとき、次の用語を使用しました。
- フィールド
- 変数
- 属性
- 財産
上記に違いはありますか?もしそうなら、正しい用語は何ですか?このエンティティが永続化されるときに使用する別の用語はありますか?
ゲッター/セッターを持つJava POJOの内部プライベート変数を参照するとき、次の用語を使用しました。
上記に違いはありますか?もしそうなら、正しい用語は何ですか?このエンティティが永続化されるときに使用する別の用語はありますか?
回答:
ここから:http : //docs.oracle.com/javase/tutorial/information/glossary.html
フィールド
財産
属性
変数
はいあります。
変数は、ローカル、フィールド、または定数にすることができます(ただし、これは技術的に間違っています)。あいまいな属性です。また、一部の人々は最終的な非静的(ローカルまたはインスタンス)変数を呼び出すのを好むことを知っている必要があります
「値」。これはおそらく、Scalaのような新興のJVM FP言語によるものです。
フィールドは通常、インスタンスクラスのプライベート変数です。ゲッターとセッターがあるという意味ではありません。
属性は曖昧な用語です。XMLまたはJavaネーミングAPIと簡単に混同される可能性があります。その用語を使用しないようにしてください。
プロパティはゲッターとセッターの組み合わせです。
以下の例
public class Variables {
//Constant
public final static String MY_VARIABLE = "that was a lot for a constant";
//Value
final String dontChangeMeBro = "my god that is still long for a val";
//Field
protected String flipMe = "wee!!!";
//Property
private String ifYouThoughtTheConstantWasVerboseHaHa;
//Still the property
public String getIfYouThoughtTheConstantWasVerboseHaHa() {
return ifYouThoughtTheConstantWasVerboseHaHa;
}
//And now the setter
public void setIfYouThoughtTheConstantWasVerboseHaHa(String ifYouThoughtTheConstantWasVerboseHaHa) {
this.ifYouThoughtTheConstantWasVerboseHaHa = ifYouThoughtTheConstantWasVerboseHaHa;
}
}
さらに多くの組み合わせがありますが、私の指は疲れてきています:)
あなたの質問がJAXBを使用して促され、正しいを選択したい場合XMLAccessType
、同じ質問がありました。JAXB Javadocは、「フィールド」は非静的で非一時的なインスタンス変数であると述べています。「プロパティ」にはゲッター/セッターのペアがあります(したがって、プライベート変数である必要があります)。「パブリックメンバー」はパブリックなので、おそらく定数です。また、JAXBでは、「属性」はのようにXML要素の一部を指します<myElement myAttribute="first">hello world</myElement>
。
一般的に、Javaの「プロパティ」は、少なくともゲッターまたはその値を取得できる他のパブリックメソッドを持つフィールドとして定義できるようです。一部の人々はまた、プロパティにはセッターが必要であると言います。このような定義では、コンテキストがすべてです。
DietelとDietelには、フィールドと変数を説明する素晴らしい方法があります。
「クラスの静的変数とインスタンス変数を合わせて、そのフィールドと呼びます。」(セクション6.3)
「変数は、クラスの複数のメソッドで使用する必要がある場合、またはプログラムがクラスのメソッドの呼び出し間で値を保存する必要がある場合にのみ、フィールドとして宣言する必要があります。」(6.4節)
したがって、クラスのフィールドは静的変数またはインスタンス変数です。つまり、クラススコープで宣言されています。
リファレンス-Dietel P.、Dietel、H。-Java™ハウツープログラム(初期オブジェクト)、第10版(2014)
Hibernateからヒントを得た場合:
Hibernateは、フィールドを使用してオブジェクトの状態を読み書きします。Hibernateは、Java BeanスタイルのプロパティもDBスキーマにマップします。Hibernateオブジェクトをロード/保存するためのフィールドにアクセスします。プロパティによってマッピングが行われる場合、hibernateはゲッターとセッターを使用します。
フィールドのゲッター/セッターがありプロパティと呼ばれる場所を区別するのはカプセル化です。これにより、setMethod内でそのプロパティの基になるデータ構造を非表示にして、セッター内の不要な変更を防ぐことができます。カプセル化が意味するものすべて...
フィールドは、使用する前に宣言して初期化する必要があります。主にクラス内部で使用します。
プロパティはセッターによって変更でき、ゲッターによって公開されます。ここでフィールド価格はゲッター/セッターを持っているのでそれは財産です。
class Car{
private double price;
public double getPrice() {…};
private void setPrice(double newPrice) {…};
}
<class name="Car" …>
<property name="price" column="PRICE"/>
</class>
同様にfieldsを使用して、[hibernateでは、フィールドを使用してMAPする推奨方法です。@Idアノテーションが付けられていますが、プロパティを使用するとより詳細に制御できます]
class Car{
private double price;
}
<class name="Car">
<property name=" price" column="PRICE" access="field"/>
</class>
Java docは言う:フィールドはクラスのデータメンバーです。フィールドは非静的、非一時的なインスタンス変数です。フィールドは通常、インスタンスクラスのプライベート変数です。
変数はフィールドと非フィールドで構成されます。
フィールドは次のいずれかです。
非フィールドは次のいずれかです。
結論として、変数間の主な違いは、それらがフィールドであるか非フィールドであるか、つまり、メソッド内またはすべてのメソッド外にあるかどうかです。
基本的な例(私の構文はすみません、私は初心者です)
Class {
//fields
method1 {
//non-fields
}
}
実際、これら2つの用語は同じものを表すためによく使用されますが、いくつかの例外的な状況があります。フィールドはオブジェクトの状態を保存できます。また、すべてのフィールドは変数です。したがって、フィールドではない変数が存在する可能性があることは明らかです。したがって、4種類の変数(クラス変数、インスタンス変数、ローカル変数、パラメーター変数)を見ると、クラス変数とインスタンス変数がオブジェクトの状態に影響を与えることがわかります。つまり、クラスまたはインスタンス変数が変化すると、オブジェクトの状態が変化します。つまり、クラス変数とインスタンス変数はフィールドであり、ローカル変数とパラメーター変数はフィールドではないと言えます。
より深く理解したい場合は、以下のソースをご覧ください。
質問は古いですが、変数とフィールドのもう1つの重要な違いは、フィールドが宣言されたときにデフォルト値が取得されることです。一方、変数は初期化する必要があります。
私の理解は以下の通りであり、これが100%正しいと言っているのではなく、私も間違っているかもしれません。
変数は、デフォルトの変化でできますが、宣言することを何か、で、異なる値を持っているが、それはまた、明示的に最終的なものといえます。それはJavaでは:
public class Variables {
List<Object> listVariable; // declared but not assigned
final int aFinalVariableExample = 5; // declared, assigned and said to be final!
Integer foo(List<Object> someOtherObjectListVariable) {
// declare..
Object iAmAlsoAVariable;
// assign a value..
iAmAlsoAVariable = 5;
// change its value..
iAmAlsoAVariable = 8;
someOtherObjectListVariable.add(iAmAlsoAVariable);
return new Integer();
}
}
したがって、基本的に、変数は宣言され、値を保持できるものです。上記のメソッドfooは、たとえば変数を返します。新しいInteger()のメモリアドレスを保持するInteger型の変数を返します。上記の他のすべては、変数、listVariable、aFinalVariableExampleでもあり、ここで説明します。
フィールドは、スコープがより明確な(または具体的な)変数です。上記の例では、メソッドfooのスコープから返される変数は明確ではないため、フィールドとは呼びません。一方、iAmAlsoVariableは「ローカル」フィールドであり、メソッドfooのスコープによって制限され、listVariableは「インスタンス」フィールドであり、フィールド(変数)のスコープはオブジェクトスコープによって制限されます。
プロパティは、アクセス/変更できるフィールドです。ゲッター/セッターを公開するフィールドはすべてプロパティです。
属性については知りません。繰り返しますが、これは、変数、フィールド、およびプロパティについての私の理解です。
variable
-名前付きストレージアドレス。すべての変数には、メモリサイズ、属性、および動作を定義する型があります。Java変数の種類のためにありますclass variable
、instance variable
、local variable
、method parameter
//pattern
<Java_type> <name> ;
//for example
int myInt;
String myString;
CustomClass myCustomClass;
field
-メンバー変数またはデータメンバー。それはvariable
内部のA class
(class variable
またはinstance variable
)
attribute
-一部の記事attribute
では、それがのobject
表現であることがわかりますclass variable
。一連の特性を定義Object
することによって動作しattributes
ます。
CustomClass myCustomClass = new CustomClass();
myCustomClass.something = "poor fantasy"; //something is an attribute of myCustomClass object with a "poor fantasy" value
property
- field
+境界getter/setter
。フィールド構文がありますが、内部でメソッドを使用します。Java
純粋な形式ではサポートしていません。見てみましょうObjective-C
、Swift
、Kotlin
例のためのKotlin
サンプル:
//field - Backing Field
class Person {
var name: String = "default name"
get() = field
set(value) { field = value }
}
//using
val person = Person()
person.name = "Alex" // setter is used
println(person.name) // getter is used