2009-12-11 25 views
36

Trong Java, đôi khi tôi sử dụng các biến lớp để gán một ID duy nhất cho mỗi cá thể mới. Tôi làm điều gì đó nhưĐiều gì thay thế các biến lớp trong scala?

public class Foo { 

    private static long nextId = 0; 

    public final long id; 

    public Foo() { 
    id = nextId; 
    nextId++; 
    } 

    [...] 

} 

Tôi có thể làm điều này trong Scala bằng cách nào?

Trả lời

60

biến trên đối tượng bạn đồng hành:

object Foo{ 
    private var current = 0 
    private def inc = {current += 1; current} 
} 

class Foo{ 
    val i = Foo.inc 
    println(i) 
} 
25

Để khuếch đại trên Thomas' câu trả lời:

Định nghĩa object thường được đặt trong cùng một tập tin với lớp, và phải có cùng tên . Điều này dẫn đến một cá thể của một đối tượng có tên của lớp, trong đó có bất kỳ trường nào bạn định nghĩa cho nó.

Bộ công cụ xây dựng Singleton tiện dụng, nói cách khác.

Ở cấp JVM, định nghĩa đối tượng thực sự dẫn đến định nghĩa của một lớp mới; Tôi nghĩ rằng nó cùng tên với một số được thêm $, ví dụ: Foo$. Chỉ trong trường hợp bạn phải tương tác một số công cụ này với Java.

+1

Đối tượng không cần phải có cùng tên với các lớp, chỉ _các đối tượng kết hợp_ thực hiện. – rightfold

+1

Chúng tôi có xu hướng sử dụng cùng một tên cho lớp và đối tượng, vì nó giúp ích rất nhiều trong việc gỡ lỗi mã. –

+0

Hai câu trả lời này nên được kết hợp – Florian

Các vấn đề liên quan