คำถามติดแท็ก javac

javac เป็นคอมไพเลอร์ Java หลักซึ่งรวมอยู่ใน Java Development Kit (JDK) จาก Sun Microsystems (ปัจจุบันคือ Oracle) และในเวอร์ชันจากผู้จำหน่ายรายอื่นด้วย

9
Java: ฉันจะรวบรวมโครงสร้างไดเร็กทอรีทั้งหมดของโค้ดได้อย่างไร
กรณีการใช้งานเป็นเรื่องง่าย ฉันได้รับซอร์สไฟล์ที่สร้างโดยใช้ Eclipse ดังนั้นจึงมีโครงสร้างไดเร็กทอรีแบบลึกซึ่งคลาส Java ใด ๆ สามารถอ้างถึงคลาส Java อื่นในโฟลเดอร์ลูกพี่น้องหรือพาเรนต์เดียวกัน ฉันจะรวบรวมสิ่งทั้งหมดนี้จากเทอร์มินัลโดยใช้ javac ได้อย่างไร

3
ทำไม javac จึงอนุญาตให้ใช้งานได้
ถ้าฉันพยายามที่จะส่ง a Stringถึงjava.util.Date, คอมไพเลอร์ Java จับข้อผิดพลาด ดังนั้นทำไมคอมไพเลอร์ไม่ตั้งค่าสถานะต่อไปนี้เป็นข้อผิดพลาด? List<String> strList = new ArrayList<>(); Date d = (Date) strList; แน่นอน JVM โยนClassCastExceptionat runtime แต่คอมไพเลอร์ไม่ได้ตั้งค่าสถานะ พฤติกรรมนี้เหมือนกันกับ javac 1.8.0_212 และ 11.0.2

1
ผู้ประกอบการ '+' ไม่สามารถนำไปใช้กับวัตถุและสตริง
รหัสต่อไปนี้: void someMethod(Object value) { String suffix = getSuffix(); if (suffix != null) value += suffix; [...] } รวบรวมโดยไม่มีข้อผิดพลาดใน JDK 8 (ใช้ -source 1.6) แต่ล้มเหลวใน JDK 6 พร้อมข้อความแสดงข้อผิดพลาด: Operator '+' cannot be applied to java.lang.Object and java.lang.String ในขณะที่ฉันเข้าใจว่าข้อผิดพลาดเกี่ยวกับอะไรทำไมถึงต้องคอมไพล์ด้วย JDK 8? เอกสารนี้มีอยู่ทุกที่หรือไม่?
12 java  java-8  javac  java-6 

3
การเลือกลายเซ็นของเมธอดสำหรับแลมบ์ดานิพจน์ที่มีเป้าหมายหลายประเภท
ฉันตอบคำถามและพบเจอสถานการณ์ที่ไม่สามารถอธิบายได้ พิจารณารหัสนี้: interface ConsumerOne<T> { void accept(T a); } interface CustomIterable<T> extends Iterable<T> { void forEach(ConsumerOne<? super T> c); //overload } class A { private static CustomIterable<A> iterable; private static List<A> aList; public static void main(String[] args) { iterable.forEach(a -> aList.add(a)); //ambiguous iterable.forEach(aList::add); //ambiguous iterable.forEach((A a) -> aList.add(a)); //OK } …
11 java  generics  lambda  javac  ecj 

1
ทำไมคอมไพเลอร์เลือกวิธีการทั่วไปนี้ด้วยพารามิเตอร์ประเภทคลาสเมื่อเรียกใช้ด้วยประเภทอินเตอร์เฟสที่ไม่เกี่ยวข้อง?
พิจารณาสองคลาสและอินเทอร์เฟซต่อไปนี้: public class Class1 {} public class Class2 {} public interface Interface1 {} ทำไมการเรียกครั้งที่สองเพื่อmandatoryเรียกใช้เมธอดโอเวอร์โหลดด้วยClass2ถ้าgetInterface1และInterface1ไม่มีความสัมพันธ์กับClass2? public class Test { public static void main(String[] args) { Class1 class1 = getClass1(); Interface1 interface1 = getInterface1(); mandatory(getClass1()); // prints "T is not class2" mandatory(getInterface1()); // prints "T is class2" mandatory(class1); // prints "T is …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.