- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
Để ý:这个问题与 Enum 无关,所以它不是重复的。Enum 被迫只与自身比较,因为编译器生成类型参数,而不是因为 java 递归类型参数。
我试图找到将类声明为的优势:
public class Some>
与声明为:
public class Some
我尝试提供返回 E
的方法和方法返回 Some
,复杂类层次结构中的不同交叉调用以及每次我试图删除额外的
- 没有出现新的错误/警告。
你能告诉我一个方法来证明这个额外的
的优势吗? ?由于 JDK 声明,我假设存在一个:
对 SO 上其他问题的回答例如:
With the additional construct, you know that any class that extends Enum is comparable only against itself
但是,我可以很容易地打破这个理论:
public static class Animal> {
public boolean compare(E other) {...}
}
public class Cat extends Animal { }
public class Dog extends Animal { } // Note "Cat" !!!
尽管是通用递归,我仍然可以比较 Dog 和 Cat:
Dog dog = new Dog();
dog.compare(new Cat());
传输理论:
you know that any class that extends Animal is comparable only against itself
这是错误的——我比较了 Dog 类,它用 Cat 扩展了 Animal,而不是它本身。
câu trả lời hay nhất
很少有像 class Some
这样的边界的情况有必要的。大多数时候人们写这个,代码中实际上没有使用绑定(bind),class Some
也可以。
但是,在某些特殊情况下,class Some
中的边界实际使用。例如:
abstract class Some> {
abstract E foo();
Some bar() {
return foo();
}
}
关于您的问题——class Some
怎么样? ?好吧,第一个最明显的问题是您使用的是原始类型。永远不要在新代码中使用原始类型。但是你不相信。
具有上述类 (class Some
) 的原始类型确实编译时带有警告(您可以忽略它,后果自负)。但是,原始类型意味着可以用它做不安全的事情。
想出一个例子来证明它是不安全的,需要付出一些努力。这是一个:
abstract class Some {
abstract E foo();
Some bar() {
return foo();
}
}
class SomeFoo extends Some {
SomeFoo foo() { return this; }
}
class SomeBar extends Some {
SomeFoo foo() { return new SomeFoo(); }
}
class SomeBaz extends Some {
SomeBar foo() { return new SomeBar(); }
}
// then in some method:
Some a = new SomeBaz();
Some b = a.bar();
SomeBar c = b.foo();
代码编译时有警告但没有错误,并抛出 Ngoại lệ ClassCast
在运行时。
关于java - 什么时候需要 Some
Tôi đang viết một phương thức Java có chữ ký sau. void Logger(Phương thức phương thức, Object[] args); Nếu một phương thức (chẳng hạn như ABC() ) gọi phương thức này Logger, thì nó sẽ
Tôi mới làm quen với Java. Vấn đề của tôi là chương trình Java của tôi không thể tìm thấy JButton mà tôi đang cố sử dụng làm tệp hình ảnh. (Hiện tại mã này không làm gì cả vì tôi chỉ có được giao diện mong muốn trước tiên). Đây là mã lớp chính của tôi: packag
Được rồi, hôm nay tôi sẽ thực hiện một cuộc phỏng vấn và tôi đã viết mã Java được nhiều năm. Trong cuộc phỏng vấn, anh ấy nói "Việc thu gom rác Java là một vấn đề hóc búa và tôi có một số người bạn đang cố gắng tìm ra nó. Bạn thấy thế nào về vấn đề này?". Cô ấy đang cố nói dối tôi phải không? Hoặc cả cuộc đời tôi
Bạn tôi đưa cho tôi một câu đố để giải. Nó diễn ra như thế này: Có 100 người trong số họ, đến lượt mình, thực hiện như sau.
Nếu tôi biên dịch một ứng dụng sử dụng mã Java 5 thành mã byte, liệu tệp .class kết quả có chạy trong Java 1.4 không? Nếu cái sau hoạt động và tôi đang cố gắng sử dụng Jav trong ứng dụng Java 1.4 của mình
Có những câu hỏi về lý do tại sao Java không hỗ trợ các kiểu không dấu và một số câu hỏi về việc xử lý các kiểu không dấu. Tôi đã thực hiện một số tìm kiếm và có vẻ như Scala cũng không hỗ trợ các kiểu dữ liệu không dấu. Hạn chế là Java và S
Tôi chỉ muốn biết liệu mã byte được tạo trong một phiên bản java có chạy trên các phiên bản java khác Câu trả lời hay nhất Thông thường, mã byte có thể chạy trên các phiên bản java mới hơn mà không cần sửa đổi. Nó sẽ không chạy trên các phiên bản cũ hơn trừ khi bạn sử dụng các tham số đặc biệt (
Tôi có một câu hỏi cơ bản về việc thực thi các chương trình java trong dấu nhắc lệnh. Trên một số máy chúng ta cần chỉ định -cp. (đường dẫn lớp) thực thi chương trình java cùng lúc (test là tên file java và file .class tồn tại trong cùng thư mục) jav
Tôi đã đọc StackOverflow được một thời gian và tôi mới có đủ can đảm để đặt câu hỏi. Tôi 20 tuổi và hiện đang học tại một trường đại học CNTT ở quê hương (Cluj-Napoca, Romania). Giới thiệu thế đủ rồi :D Về cơ bản, tôi có một công ty cung cấp ứng dụng kế toán
Tôi không thể public JSONObject parseXML(String xml) { JSONObject jsonObject = XML.toJSONObject(xml); r
Tôi đã triển khai một ngôn ngữ thông dịch đơn giản với kiểu gõ động trong Java. Thật không may tôi gặp phải vấn đề sau. Đoạn mã sau được sử dụng trong quá trình thử nghiệm: def main() { def ks = Map[[1, 2]].keySet()
Luôn nhắc nhập một số từ 1 đến 10 - kết quả sẽ cộng thêm st, rd, th và nd vào số đó. Viết chương trình nhắc người dùng nhập bất kỳ số nguyên nào từ 1 đến 10, sau đó hiển thị số nguyên đó ở dạng thứ tự có thêm hậu tố. công cộng
Tôi có DownloadFile.java này và nó tải xuống tệp như mong đợi: import java.io.*; import java.net.URL public class DownloadFile {
Tôi muốn thêm độ trễ vào GUI. Tôi đặt 2 vòng lặp for rồi vẽ lại nhãn, nhưng 2 vòng lặp for này được thực thi lần lượt và nhãn được vẽ lại đến nhãn cuối cùng. Tôi có thể làm gì? for(int i=0;
Tôi đang thực hiện một số thử nghiệm với các mục danh sách của đối tượng Sinh viên, nhưng tôi thích tạo một danh sách được mã hóa cứng trong đối tượng lớp java rồi lấy dữ liệu từ đó thay vì kết nối với cơ sở dữ liệu và chọn các bản ghi trong tập kết quả. Tuy nhiên, đã lâu rồi tôi mới làm việc này,
Tôi biết rằng việc tạo đối tượng được chia thành ba phần: khai báo khởi tạo khởi tạo classA{} classB mở rộng classA{} classA obj = khởi tạo classB mới (1,1);
Tôi quan tâm đến việc xây dựng hệ thống theo dõi xe bằng GPRS. Tuy nhiên, tôi có một số câu hỏi dành cho những ai đã từng làm việc này trước đây: GPRS có phải là công nghệ tốt nhất không? Mọi người có nhận thức được vấn đề gì không? Tôi dự định sử dụng Java/Java EE - có công nghệ nào tốt hơn không? nếu như
Tôi có thể đảo ngược mảng bằng phương pháp đệ quy như: array={1,2,3,4,5} array result={5,4,3,2,1} nhưng kết quả của tôi là cùng một mảng và tôi không biết Tại sao, xin hãy giúp tôi. lớp công khai Đệ quy { p
Có một cách tiêu chuẩn để làm điều này? Bao gồm mã nguồn Java - Mã kiểm tra - Đơn vị liên kết Ant hoặc Maven Tích hợp liên tục (có thể là kiểm soát hành trình) Công cụ kiểm soát phiên bản ClearCase Triển khai đến máy chủ ứng dụng Cuối cùng, tôi muốn có một môi trường tích hợp và xây dựng tự động.
Tôi thậm chí không biết liệu điều này có khả thi hay không và tôi rất nghi ngờ điều đó là có thể, nhưng nếu có, bạn có thể cho tôi biết cách thực hiện không? Tôi chỉ muốn biết cách in một số văn bản từ máy in. Có ý tưởng gì không? Câu trả lời hay nhất Đây là một cái gì đó đơn giản hơn. nhập javax.swin
Tôi là một lập trình viên xuất sắc, rất giỏi!