Ai đó có thể giải thích tại sao điều này biên dịch trong JDK 1.6, nhưng không phải trong JDK 1.7 từ mà tôi nhận được thông báo lỗi:Java 7 nhưng không phải Java 6: "không phải là trừu tượng và không ghi đè phương pháp trừu tượng"
java: Ví dụ không trừu tượng và không ghi đè lên phương thức trừu tượng compareTo (java.lang.Object) trong java.lang.Comparable?
import java.util.concurrent.*;
public class Example implements ScheduledFuture
{
@Override public long getDelay(TimeUnit unit){ return 0; }
@Override public int compareTo(Delayed o) { return 0; }
@Override public boolean cancel(boolean mayInterruptIfRunning) { return false; }
@Override public boolean isCancelled() { return false; }
@Override public boolean isDone() { return false; }
@Override public Object get() throws InterruptedException, ExecutionException { return null; }
@Override public Object get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException { return null; }
}
Để biết thông tin của bạn, các phương pháp trong lớp này được tạo ra bởi IntelliJ sau khi viết chỉ khai báo lớp.
Thông báo lỗi cho biết trình biên dịch yêu cầu lớp đó khai báo phương thức compareTo có tham số được nhập Object
và lớp này mất Delayed
. Tuy nhiên, giao diện ScheduledFuture
được định nghĩa là mở rộng Delayed
mà lần lượt mở rộng Comparable<Delayed>
vì vậy với tôi mọi thứ dường như theo thứ tự.
Nếu tôi chỉ cần thay đổi việc kê khai để
private class Example implements ScheduledFuture<Object>
nó biên dịch.
Tôi đoán nó có liên quan đến việc xóa kiểu bằng cách nào đó nhưng tôi không thể giải thích nó để thỏa mãn bản thân mình.
Tôi ở vị trí của bạn sẽ tìm kiếm javadoc cho ScheduledFuture từ 1.6 và 1.7 và kiểm tra những gì đã thay đổi. – Ingo
Nó xảy ra với tôi rằng Java 6 không ngăn chặn thừa kế kiểu thô từ các lớp được parametrized trong khi 7 không – fglez