Không thể trong trường hợp như của bạn.
Các đặc điểm kỹ thuật Ceylon nói (section 4.5.4 Class Inheritance):
Một lớp con của một lớp lồng nhau phải là thành viên của các loại khai báo lớp lồng nhau hoặc của một subtype của các loại khai báo lớp lồng nhau. Một lớp thỏa mãn giao diện lồng nhau phải là một thành viên của kiểu khai báo giao diện lồng nhau hoặc của một kiểu con của kiểu khai báo giao diện lồng nhau.
Vì vậy, bạn chỉ có thể đáp ứng giao diện lồng nhau bên trong lớp khai báo hoặc trong phân lớp của lớp đó. Có ngôn ngữ tương tự để mở rộng giao diện lồng nhau bằng giao diện mới.
này không trực tiếp đề cập đến object
tờ khai, nhưng những người chỉ đơn thuần là một phím tắt cho các định nghĩa lớp, được chi tiết một chút sau, vào Anonymous classes:
Việc kê khai như sau:
shared my object red extends Color('FF0000') {
string => "Red";
}
là chính xác tương đương với:
shared final class \Ired of red extends Color {
shared new red extends Color('FF0000') {}
string => "Red";
}
shared my \Ired red => \Ired.red;
Nơi \Ired
là tên kiểu được trình biên dịch gán.
Vì vậy, điều này cũng bao gồm các tờ khai object
làm tờ khai của bạn.
gì bạn có thể làm (tôi đã không kiểm tra này):
AOuterClass.AInterface test(){
object o extends AOuterClass() {
shared object impl satisfies AInterface{}
}
return o.impl;
}
Tất nhiên, điều này không làm việc cho một đối tượng AOuterClass
hiện có, chỉ dành riêng cho một mới được tạo ra một. Thấy rằng điều này cho phép truy cập một giá trị riêng của một đối tượng, điều này có vẻ là một điều tốt.
Nguồn
2017-07-27 19:05:42
Tôi đồng ý, đó là giải pháp đơn giản nhất. (Và có, nó hoạt động.) –
Ý tưởng là tạo và triển khai giao diện từ bên ngoài cho một 'đã'. (Nhưng nó cũng chỉ là một ý tưởng và nó không phải là quan trọng, tôi chỉ tự hỏi nếu tôi có một số cú pháp lừa) –