tôi cần phải ghi đè lên các phương pháp Java sau trong một lớp học Scala:Scala: Ghi đè một Generic Phương pháp Java mà trả về null
public class Test<T> {
public T test(T o, boolean x) {
if (x) {
return o;
}
return null;
}
}
Với phương pháp sau đây (trong Scala), trình biên dịch phàn nàn, "Biểu hiện của loại Null không phù hợp với mong đợi kiểu T ":
class Test2[T] extends Test[T] {
override def test(o: T, x: Boolean): T = {
if (x) {
return o
}
return null
}
}
tôi cũng đã cố gắng để xác định Option[T]
như giá trị trả về, nhưng sau đó một lần nữa, trình biên dịch phàn nàn rằng chữ ký phương pháp sẽ không khớp.
Bất kỳ ý tưởng nào? - Cảm ơn!
Edit:
đề nghị Daniel làm việc cho các vấn đề như gửi ban đầu; Tuy nhiên, tôi thực tế vấn đề không may vẫn hơi khác (bằng cách tham số kiểu generic trong phương pháp, không lớp, định nghĩa) (xin lỗi):
Java:
public class Test {
public <T> T test(T o, boolean x) {
if (x) {
return o;
}
return null;
}
}
Scala:
class Test2 extends Test {
override def test[T >: Null](o: T, x: Boolean): T = {
if (x) {
return o
}
return null
}
}
Lập lại lỗi không thành công, "Biểu thức loại Null không phù hợp với loại T mong đợi".
(Tôi tin rằng đó là bởi vì override
không bao gồm bất kỳ khả năng - tức là, một cái gì đó kiểu Nothing
có thể được truyền cho Test.test(..)
- tốt, có thể nó ;-))
gì làm việc là ném một RuntimeException
thay vì trả lại null
như Ricky đã đề xuất; tuy nhiên, tôi sẽ rất biết ơn cho đầu vào thêm.
Cảm ơn tất cả!
Đó là giải pháp hoàn hảo cho vấn đề như ban đầu được đăng; tuy nhiên, tôi phải tìm ra rằng vấn đề thực tế hơi khác. - Tôi sẽ đánh dấu đây là giải pháp nếu không có câu trả lời chính xác hơn, nhưng bạn có thể vui lòng xem lại một lần nữa trong câu hỏi - hiện đã được chỉnh sửa hay không. - Cảm ơn rất nhiều. – robbbert
Cảm ơn, tốt lắm. - Cả hai giải pháp làm việc (thứ hai sử dụng '[T]' như tham số kiểu), mặc dù tôi chưa hiểu rõ vấn đề ... – robbbert
@robbbert Tìm kiếm thông tin về 'Nothing' và' Null' để hiểu nó tốt hơn . –