Có thể hạn chế các loại có thể thực hiện một đặc điểm không? Nói, ví dụ tôi có một loạiHạn chế các loại có thể thực hiện Trait
interface Something {
void foo()
}
và một đặc điểm
trait SomethingAbility {
void bar() {
println "bar"
}
}
Có cách nào mà tôi chỉ có thể cho phép các đặc điểm được thực hiện bởi các lớp học mà là của loại Something
, ví dụ
// OK
class SomethingImpl implements Something, SomethingAbility {
void foo() {
println "foo"
}
}
// error: this class should not be allowed to implement the trait
// because it's not a Something
class NotSomething implements SomethingAbility {
void foo() {
println "foo"
}
}
Một lựa chọn là để thêm một phương pháp trừu tượng đến đặc điểm
trait SomethingAbility {
void bar() {
println "bar"
}
abstract void foo()
}
Điều này sẽ có nghĩa là đặc điểm không thể được thực hiện bởi một lớp trừ lớp mà còn cung cấp một phương pháp foo()
, nhưng điều này không phải là điều tương tự như lớp phúc lợi của loại Something
làm cho 'SomethingAbility' triển khai' Something '? – cfrick
@cfrick no ..... Tôi muốn chắc chắn rằng tôi có thể gọi phương thức 'Something' từ' SomethingAbility', nhưng bản thân 'SomethingAbility' không cần phải là' Cái gì đó ' –
nếu quacks giống như một con vịt .. ; P nhưng nó nghĩ rằng ví dụ cuối cùng của bạn và câu cuối cùng nên được về trừu tượng 'foo' và không' bar'? – cfrick