Đó là mã tôi có cho một bài tập lập trình cho lớp học. Tôi không chắc chắn lý do tại sao tôi sử dụng Task other = (Task)x;
hoặc những gì nó đang làm ở đây. Phần còn lại tôi hiểu. Nếu bất cứ ai có một lời giải thích nhanh chóng về những gì thực sự đang làm ở đây tôi sẽ rất tuyệt vời. Cảm ơn bạn!Tại sao có một dàn diễn viên trong một đối tượng compareTo (Object)
Trả lời
Bạn đang đúc Object x
để Task other
- Object
và Task
nhiều loại khác nhau, vì vậy bạn cần các diễn viên để bạn có thể đối xử với x
như các loại dự kiến (và nhận được đến đó là lĩnh vực).
Thông thường trong compareTo()
đầu tiên bạn sẽ phải một cái gì đó giống như if (x instanceof Task)
trước một cách mù quáng đúc nó - nếu bạn không và các loại khác nhau sau đó mọi thứ sẽ sụp đổ)
... và bởi vì điều đó không xảy ra, một cái gì đó sẽ đi sai nếu bạn so sánh nói một nhiệm vụ và một chuỗi. – gnasher729
Được rồi, cảm ơn bạn rất nhiều! –
@SarahDiri: Nếu câu trả lời này giúp bạn, hãy chấp nhận nó :) –
Chữ ký phương pháp có một đối tượng Object
loại như vậy để tham chiếu biến số priority
trong đối tượng được truyền vào, nó phải thực hiện một phép đúc đối tượng Task
vì biến chỉ tồn tại trong lớp Task
.
Cá nhân, mặc dù tôi nghĩ rằng đây là thực hành không tốt vì bạn không biết loại đối tượng nào đang được chuyển vào (bất kỳ lớp con nào có thể được chuyển vào), vì vậy một trường hợp séc sẽ không mất đi số tiền bạn muốn chạy vào một lỗi thời gian chạy của một ClassCastException. Bạn có thể sử dụng generics để chỉ định loại đối tượng nào bạn muốn so sánh. Vì vậy, chứ không phải làm điều này ...
public class Task implements Comparable {
private int priority = 1;
@Override
public int compareTo(Object o) {
if (o instanceof Task) {
Task t = (Task) o;
return this.priority < t.priority;
}
return -1;
}
}
... bạn có thể làm điều này ...
public class Task implements Comparable<Task> {
private int priority = 1;
@Override
public int compareTo(Task t) {
return this.priority < t.priority;
}
}
Tôi có thể thay đổi 'Object x' thành một cái gì đó cụ thể hơn (trong trường hợp này,' Task x' có thể)? Tôi đã bị ấn tượng bởi chính bài học rằng đó chỉ là 'cách nó được thực hiện'. –
@SarahDiri Chỉ có hai cách để "thay đổi" 'x' từ' Object' thành 'Task' là thực hiện phép đúc (mà bạn đã làm) hoặc thay đổi tham số phương thức để chỉ cho phép các đối tượng' Task' được thông qua trong tham số. Java cho phép điều này bằng cách sử dụng Generics (vì vậy 'thực hiện Comparable
Xem thêm [Loại thô là gì và tại sao chúng ta không nên sử dụng nó?] (Http://stackoverflow.com/questions/2770321/what-is -a-nguyên-loại-và-tại sao-không nên-chúng-dùng-nó) –
- 1. Tại sao dàn diễn viên này lại dư thừa?
- 2. Tại sao IEnumerable không cần một dàn diễn viên nhưng Danh sách có?
- 3. Tại sao dàn diễn viên này không hoạt động?
- 4. Một chuyển đổi rõ ràng tồn tại (bạn có thiếu một dàn diễn viên không?)
- 5. Tại sao Class.getAnnotation() yêu cầu tôi thực hiện một dàn diễn viên?
- 6. tại sao dàn diễn viên này không yêu cầu chuyển tiếp theo ARC?
- 7. Trong hàm Scala được tham số hóa này, tại sao tôi cần dàn diễn viên?
- 8. Lịch.before (Object when), tại sao Object?
- 9. Đối tượng chung cần có dàn diễn viên mặc dù nó thực hiện giao diện được yêu cầu
- 10. Tại sao có một quá trình dàn dựng trong git?
- 11. Tại sao bỏ null vào Object?
- 12. Tại sao compareTo trên một Enum cuối cùng trong Java?
- 13. Tại sao một diễn viên được yêu cầu cho phép trừ byte trong C#?
- 14. Java, diễn viên năng động, giá trị truyền từ Object đến đối tượng của lớp đích
- 15. Tạo một diễn viên
- 16. Java nhận String CompareTo như một đối tượng so sánh
- 17. Tái nhiều biến rộng với dàn diễn viên
- 18. Scala: Tại sao diễn viên lại nhẹ?
- 19. C dàn diễn viên thực sự làm gì?
- 20. Loại dàn diễn viên nào từ Type * đến void *?
- 21. Implicit đúc - mà dàn diễn viên được sử dụng
- 22. Tại sao không có lớp java.lang.Array? Nếu một mảng java là một đối tượng, nó không nên mở rộng Object?
- 23. Tại sao Object()! = Object() trong JavaScript?
- 24. Tại sao truyền sang loại chung chậm hơn so với dàn diễn viên rõ ràng trong C#?
- 25. Có size_t foo = 0; cần một diễn viên?
- 26. tĩnh cast so với dàn diễn viên năng động
- 27. Tại sao toString() trên một đối tượng Object (mà là null) không phải là ném NPE?
- 28. Tại sao việc sử dụng Object Initializer giữ một đối tượng còn sống?
- 29. Phát trực tiếp từ một diễn viên
- 30. Tại sao ("abc" + char.MaxValue) .CompareTo ("abc") == 0?
Bạn đang thực hiện 'Comparable' hoặc một số giao diện khác? Nếu vậy, nó sẽ có giá trị thêm tuyên bố lớp học. –