เมื่อใช้แบบนี้:
import static com.showboy.Myclass;
public class Anotherclass{}
ความแตกต่างระหว่างimport static com.showboy.Myclass
และimport com.showboy.Myclass
คืออะไร
เมื่อใช้แบบนี้:
import static com.showboy.Myclass;
public class Anotherclass{}
ความแตกต่างระหว่างimport static com.showboy.Myclass
และimport com.showboy.Myclass
คืออะไร
คำตอบ:
การประกาศการนำเข้าแบบคงที่นั้นคล้ายคลึงกับการประกาศการนำเข้าแบบปกติ ในกรณีที่การประกาศการนำเข้าแบบปกตินำเข้าคลาสจากแพ็กเกจอนุญาตให้ใช้โดยไม่มีการรับรองแพ็กเกจการประกาศการนำเข้าแบบสแตติกนำเข้าสมาชิกแบบสแตติกจากคลาสซึ่งอนุญาตให้ใช้แบบไม่มีคลาสการรับรอง
ดังนั้นเมื่อใดที่คุณควรใช้การนำเข้าแบบคงที่ เท่าที่จำเป็นมาก! ใช้งานได้ก็ต่อเมื่อคุณถูกล่อลวงให้ประกาศสำเนาของค่าคงที่ในท้องถิ่นหรือเพื่อใช้ในการละเมิดมรดก (Antipattern Interface แบบคงที่) กล่าวอีกนัยหนึ่งใช้เมื่อคุณต้องการเข้าถึงสมาชิกแบบสแตติกจากคลาสหนึ่งหรือสองบ่อยครั้ง หากคุณใช้คุณลักษณะการนำเข้าแบบคงที่มากเกินไปก็สามารถทำให้โปรแกรมของคุณไม่สามารถอ่านได้และไม่สามารถทำลายได้ทำให้เกิดเนมสเปซกับสมาชิกแบบคงที่ทั้งหมดที่คุณนำเข้า ผู้อ่านรหัสของคุณ (รวมถึงคุณไม่กี่เดือนหลังจากที่คุณเขียนมัน) จะไม่ทราบว่าสมาชิกแบบคงที่ซึ่งมาจากชั้นเรียน การนำเข้าสมาชิกแบบสแตติกทั้งหมดจากคลาสอาจเป็นอันตรายอย่างยิ่งต่อการอ่านได้ หากคุณต้องการสมาชิกเพียงหนึ่งหรือสองคนให้นำเข้าทีละรายการ ใช้อย่างเหมาะสมการนำเข้าแบบคงที่สามารถทำให้โปรแกรมของคุณอ่านง่ายขึ้น
ไม่มีความแตกต่างระหว่างการนำเข้าทั้งสองที่คุณระบุ อย่างไรก็ตามคุณสามารถใช้การอิมพอร์ตแบบสแตติกเพื่ออนุญาตการเข้าถึงสมาชิกแบบสแตติกของคลาสอื่นอย่างไม่มีเงื่อนไข ที่ฉันเคยต้องทำสิ่งนี้:
import org.apache.commons.lang.StringUtils;
.
.
.
if (StringUtils.isBlank(aString)) {
.
.
.
ฉันสามารถทำสิ่งนี้:
import static org.apache.commons.lang.StringUtils.isBlank;
.
.
.
if (isBlank(aString)) {
.
.
.
การนำเข้าคงที่ใช้ในการนำเข้าสาขา / วิธีคงที่ของชั้นเรียนแทน:
package test;
import org.example.Foo;
class A {
B b = Foo.B_INSTANCE;
}
คุณสามารถเขียน :
package test;
import static org.example.Foo.B_INSTANCE;
class A {
B b = B_INSTANCE;
}
มันจะมีประโยชน์ถ้าคุณมักจะใช้ค่าคงที่จากคลาสอื่นในรหัสของคุณและหากการนำเข้าคงที่ไม่ชัดเจน
Btw ในตัวอย่างของคุณ "import static.example.Myclass;" จะไม่ทำงาน: การนำเข้ามีไว้สำหรับคลาสและนำเข้าแบบคงที่สำหรับสมาชิกแบบคงที่ของคลาส
แนวคิดพื้นฐานของการนำเข้าแบบสแตติกคือเมื่อใดก็ตามที่คุณใช้คลาสสแตติกตัวแปรแบบคงที่หรือแบบ enum คุณสามารถนำเข้าและบันทึกตัวเองจากการพิมพ์บางอย่าง
ฉันจะอธิบายประเด็นของฉันอย่างละเอียดด้วยตัวอย่าง
import java.lang.Math;
class WithoutStaticImports {
public static void main(String [] args) {
System.out.println("round " + Math.round(1032.897));
System.out.println("min " + Math.min(60,102));
}
}
รหัสเดียวกันกับการนำเข้าคงที่:
import static java.lang.System.out;
import static java.lang.Math.*;
class WithStaticImports {
public static void main(String [] args) {
out.println("round " + round(1032.897));
out.println("min " + min(60,102));
}
}
หมายเหตุ : การนำเข้าแบบคงที่อาจทำให้โค้ดของคุณสับสนในการอ่าน
import static java.lang.Math
โดยไม่มีเครื่องหมายดอกจันหรือไม่?
ความแตกต่างระหว่าง "import static com.showboy.Myclass" และ "import com.showboy.Myclass"?
ข้อแรกควรสร้างข้อผิดพลาดของคอมไพเลอร์เนื่องจากการอิมพอร์ตแบบสแตติกทำงานกับการอิมพอร์ตฟิลด์หรือชนิดสมาชิกเท่านั้น (สมมติว่า MyClass ไม่ใช่ชั้นในหรือสมาชิกจาก showboy)
ฉันคิดว่าคุณหมายถึง
import static com.showboy.MyClass.*;
ซึ่งทำให้ฟิลด์แบบสแตติกและสมาชิกทั้งหมดจาก MyClass พร้อมใช้งานในหน่วยการคอมไพล์จริงโดยไม่ต้องผ่านการรับรอง ... ดังอธิบายข้างต้น
import
ช่วยให้โปรแกรมเมอร์ java ในการเรียนการเข้าถึงของแพคเกจที่ไม่มีวุฒิการศึกษาแพคเกจ
static import
คุณสมบัติช่วยให้การเข้าถึงสมาชิกคงที่ของระดับที่ไม่มีวุฒิการศึกษาชั้นเรียน
การimport
ให้การเข้าถึงคลาสและส่วนติดต่อในขณะที่static import
ให้การเข้าถึงสมาชิกแบบคงที่ของคลาส
ตัวอย่าง:
ด้วยการนำเข้า
import java.lang.System.*;
class StaticImportExample{
public static void main(String args[]){
System.out.println("Hello");
System.out.println("Java");
}
}
ด้วยการนำเข้าคงที่
import static java.lang.System.*;
class StaticImportExample{
public static void main(String args[]){
out.println("Hello");//Now no need of System.out
out.println("Java");
}
}
ดูเพิ่มเติม: การนำเข้าแบบคงที่ใน Java 5 คืออะไร
สมมติว่าคุณมีเขตข้อมูลแบบคงที่และวิธีการภายในชั้นเรียกว่าMyClass
ภายในแพคเกจที่เรียกว่าmyPackage
และคุณต้องการที่จะเข้าถึงได้โดยตรงโดยการพิมพ์ myStaticField
หรือmyStaticMethod
โดยไม่ต้องพิมพ์ในแต่ละครั้งหรือMyClass.myStaticField
MyClass.myStaticMethod
หมายเหตุ: คุณต้องทำ
import myPackage.MyClass
หรือmyPackage.*
เพื่อเข้าถึงทรัพยากรอื่น ๆ
โมดิstatic
ฟายเออร์หลังจากimport
นั้นใช้สำหรับดึง / ใช้ฟิลด์สแตติกของคลาส พื้นที่หนึ่งที่ฉันใช้import static
สำหรับดึงค่าคงที่จากคลาส นอกจากนี้เรายังสามารถใช้import static
วิธีคงที่ ตรวจสอบให้แน่ใจว่าพิมพ์import static
เพราะstatic import
ไม่ถูกต้อง
อะไรคือสิ่งที่static import
อยู่ในชวา - JavaRevisited - import static
ทรัพยากรที่ดีมากที่จะรู้เพิ่มเติมเกี่ยวกับ