- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我有以下(第三方)类结构。我们将调用第三方项目 ProjectSeriously
,并注意我使用 System.out.println
代替其他复杂的功能(100 行代码) .
class A {
public void hi() {
// Do an important thing
System.out.println("Important thing A");
}
}
class B extends A {
public void hi() {
// Do some terrible, terrible things
System.out.println("TERRIBLE THING B");
// Do that important thing
super.hi();
}
}
现在我想写这个(这不是有效的 java):
class C extends B {
public void hi() {
// Do some not-so-terrible things
System.out.println("Ok thing C");
// Do that important thing
super.super.hi();
}
}
我必须将 trường hợp của
B 传递给这个精彩项目 ProjectSeriously
的其他部分。鉴于这些是公共(public)方法,我觉得这应该是可能的。
câu trả lời hay nhất
你可以使用 javassist hiện hữu使用它之前修改类。
但这是一个非常丑陋的 hack,请尝试重构 A 和/或 B 中的代码以暴露重要部分。
kiểm tra gói;
import javassist.ClassPool;
import javassist.CtClass;
import javassist.CtMethod;
import javassist.CtNewMethod;
class A {
public void hi() {
// Do an important thing
System.out.println("Important thing A");
}
}
class B extends A {
public void hi() {
// Do some terrible, terrible things
System.out.println("TERRIBLE THING B");
// Do that important thing
super.hi();
}
}
class C extends B {
public void hi() {
// Do some not-so-terrible things
System.out.println("Ok thing C");
// Do that important thing
super.hi();
}
}
lớp công khai Main {
public static void main(String[] args) throws Exception {
CtClass cc = ClassPool.getDefault().get("test.B"); // don't use test.B.class.getName() as this force the class loader to load the class
CtMethod m1 = cc.getDeclaredMethod("hi");
cc.removeMethod(m1);
CtMethod m2 = CtNewMethod.copy(m1, cc, null);
m2.setBody("{ /* override method B.hi() body */ return super.hi();}", "this", m1.getName());
cc.addMethod(m2);
cc.toClass();
C obj = new C();
obj.hi();
}
}
kết quả:
Ok thing C
Important thing A
关于java - 调用 super.super.method,跳过 super.method,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29928606/
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!