2012-07-02 27 views
12

Làm thế nào để có hàng nhập khẩu có điều kiện trong Java như chúng ta có ifdefs trong C Đây là những gì tôi có ý định để đạt đượcJava có điều kiện nhập khẩu

ifdef TEST 
import com.google.mystubs.swing; 
elif 
import javax.swing.*; 
endif 
+0

Tập hợp con có thể có của: http://stackoverflow.com/questions/4526113/java-conditional-compilation-how-to-prevent-code-chunks-to-be-compiled –

Trả lời

13

Bạn không cần phải nhập khẩu có điều kiện với java

Nhưng bạn có điều kiện có thể sử dụng các lớp học khác nhau với cùng một tên sử dụng tên đầy đủ

ví dụ:

if(useSql){ 
    java.sql.Date date = new java.sql.Date() 
}else{ 
    java.util.Date date = new java.util.Date() 
} 
+2

Điều này chỉ thực sự mang lại lợi ích nếu cả hai Ngày đã triển khai một giao diện chung. – gdw2

+0

Giả sử cả hai thư viện đó là các JAR bên ngoài. Trình biên dịch sẽ bao gồm cả các JAR đó trong mã được biên dịch nếu 'useSql' là' static final'? –

+0

Có. nó sẽ. tuy nhiên bạn vẫn cần phải cung cấp nó trong thời gian chạy –

2

Chúng tôi không nhập khẩu có điều kiện trong java

0

Java Không hỗ trợ điều kiện import.

2

Không có hỗ trợ cho điều này tại Java.
Hãy nhớ rằng #IFDEF được thực hiện ở giai đoạn tiền xử lý tại C++ - Không hỗ trợ Java cho điều đó.
Những gì bạn có thể thử và có thứ gì đó giống như bộ xử lý chú thích, trước khi các chú thích ngày được giới thiệu trong JDK 1.5.
Ngoài ra, bạn có thể sử dụng chú thích để xử lý trong thời gian biên dịch.
This blog cung cấp cho bạn một số thông tin

0

Điều bạn đang cố gắng làm là một ý tưởng hợp lệ, nhưng bạn nên sử dụng mocks thay thế. Mockito là một thư viện tuyệt vời cho điều đó.

Mô hình có một chút khác biệt, nhưng bạn nên nhìn vào thử nghiệm đơn vị với thư viện giả mạo và hiểu được điều đó, điều này sẽ cho phép bạn làm những gì bạn đang cố gắng theo cách tốt hơn .

0

Java Comment Preprocessor hỗ trợ tiền tố và hậu tố phần trong tài liệu kết quả và nó rất hữu ích để tạo thành phần lớp nhập khẩu, bạn có thể đặt chuỗi nhập khẩu thậm chí ở giữa lớp học của bạn

//#ifdef FLAG 
//+prefix 
import some.class.Clazz; 
//-prefix 
    Clazz.call(); 
//#endif 
0

Bạn có thể sử dụng một truyền thống câu lệnh if và sau đó thay vì nhập làm Class.forName("example.ExampleClass") Điều đó sẽ trả lại đối tượng Class mà sau đó bạn có thể gọi Class.newInstance() vào. Nó sẽ cho phép bạn tránh các lỗi biên dịch thời gian cho các phụ thuộc có thể không tồn tại cũng như làm một cái gì đó tương tự như nhập khẩu có điều kiện.

Các vấn đề liên quan