2010-11-02 30 views
16

Tôi sử dụng tấm thảm 5 làm lựa chọn khung web của tôi. Tapestry cho phép tôi xác định các ký hiệu trong lớp cấu hình và chèn các ký hiệu vào các thành phần khác.Thực hành tốt nhất để sử dụng hằng số trong chú thích scala

ví dụ,

 
public interface SymbolConstants { 
    static String DEFAULT_TIMEOUT_KEY = "default.timeout"; 
} 

public class AppModule { 
    void contributeApplicationDefault(Configuration conf) { 
     conf.add(SymbolConstants.DEFAULT_TIMEOUT_KEY, "10"); 
    } 
} 

public class MyComponent { 
    @Symbol(SymbolConstants.DEFAULT_VALUE_KEY) 
    private long timeout; 
} 

Khả năng để xác định hằng số tĩnh và sử dụng chúng như các giá trị chú thích mang lại cho tôi biên dịch kiểm tra thời gian.

Tôi tự hỏi cách xác định hằng số và sử dụng chúng làm giá trị của chú thích scala. Nếu không, cách tốt nhất để xác định/giới hạn giá trị mà chúng ta có thể gán cho chú thích trong scala là gì.

Trả lời

1

Nó dường như không thể w phiên bản/scala 2.8.1.final, 2.8.2.final, hoặc 2.9.1.final (kết quả là như nhau với tất cả):

object Constant { val UNCHECKED = "unchecked" } 

class Test {          
    @SuppressWarnings(Array(Constant.UNCHECKED)) 
    def test: Unit = println("testing.. 1, 2... 3") 
} 

.

<console>:7: error: annotation argument needs to be a constant; found: Constant.UNCHECKED 
      @SuppressWarnings(Array(Constant.UNCHECKED)) 
+0

Nó không hoạt động vì SuppressWarnings muốn một mảng. Nếu bạn sử dụng một chú thích khác. nó hoạt động. Hãy thử với @SerialVersionUID. http://www.scala-lang.org/node/106 – onof

20

Từ khóa 'cuối cùng' là bắt buộc để trình biên dịch phát ra nó như bạn làm trong Java. Ví dụ:

object Foo 
{ 
    final val MY_SYMBOLIC_CONSTANT="whatever" 
} 

Có vẻ như, nếu không, bạn chỉ nhận được phương thức truy cập dưới mui xe không được tính toán tĩnh.

+1

Không hoạt động (sử dụng Scala 2.10) – sortega

+0

Làm việc cho tôi ở Scala 2.10.3! –

+0

Không hoạt động ở Scala 2.10.4 :-( –

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