id
次のオブジェクトが2などになるように、1から始めて生成する方法を知っている人はいますか?
私は次のことを試しましたが、うまくいきません:
class students{
private int id;
private String name;
public student(String name){
this.id=id++;
this.name
}
}
id
次のオブジェクトが2などになるように、1から始めて生成する方法を知っている人はいますか?
私は次のことを試しましたが、うまくいきません:
class students{
private int id;
private String name;
public student(String name){
this.id=id++;
this.name
}
}
シーケンシャルIDを生成するための一般的な解決策は、データベースを使用することです。ほとんどのデータベースには、これを行うための組み込みの方法があります。たとえば、 SQLServerIDENTITY
またはAUTO_INCREMENT
MySQLで。
Hibernateのような永続性フレームワークの使用を検討してください。アイデンティティ、hilo、uuidなどの多くの実証済みの戦略の1つを宣言できます。これらの戦略には、シーケンシャルなものとそうでないものがあります。一部はアプリケーションによって生成され、一部はデータベースによって生成されますが、トレードオフは十分に文書化されており、自分が何に取り組んでいるのかがわかります。
最後に使用されたインデックスを追跡するには、静的クラス メンバーが必要です。コピー コンストラクターも必ず実装してください。
class students
{
private static int next_id = 0; // <-- static, class-wide counter
private int id; // <-- per-object ID
private String name;
public students(String name)
{
this.id = ++students.next_id;
this.name = name;
// ...
}
public students(students rhs)
{
this.id = ++students.next_id;
this.name = rhs.name;
// ...
}
public static void reset_counter(int n) // use with care!
{
students.next_id = n;
}
// ...
}
更新: @JordanWhite が示唆するように、静的カウンターをatomicにしたい場合があります。これは、同時に使用しても安全であることを意味します (つまり、一度に複数のスレッドで)。そのために、タイプを次のように変更します。
private static AtomicInteger next_id = new AtomicInteger(0);
インクリメントおよび読み取り操作とリセット操作は次のようになります。
this.id = students.next_id.incrementAndGet(); // like "++next_id"
students.next_id.set(n); // like "next_id = n"
とに変更する必要がprivate int id;
ありprivate static int id;
ます。id++
++id
あなたが試すことができます:
class Students{
private static int id;
private String name;
public Students(String name){
this.id=++id; // this.id +=1;may be better
System.out.println(this.id);
this.name = name;
}
}
テストコード:
public class Test {
public static void main(String[] args) {
Students s1 = new Students("Mark1");
Students s2 = new Students("Mark2");
}
}