คลาสที่ไม่ระบุชื่อสามารถใช้สองอินเทอร์เฟซ (หรือมากกว่า) ได้อย่างไร? หรืออีกวิธีหนึ่งวิธีที่สามารถมันทั้งขยายชั้นเรียนและการใช้อินเตอร์เฟซอยู่แล้ว? ตัวอย่างเช่นฉันต้องการสร้างออบเจ็กต์ของคลาสที่ไม่ระบุชื่อที่ขยายสองอินเทอร์เฟซ:
// Java 10 "var" is used since I don't know how to specify its type
var lazilyInitializedFileNameSupplier = (new Supplier<String> implements AutoCloseable)() {
private String generatedFileName;
@Override
public String get() { // Generate file only once
if (generatedFileName == null) {
generatedFileName = generateFile();
}
return generatedFileName;
}
@Override
public void close() throws Exception { // Clean up
if (generatedFileName != null) {
// Delete the file if it was generated
generatedFileName = null;
}
}
};
จากนั้นฉันสามารถใช้มันในบล็อก try-with-resources เหมือนกับAutoCloseable
คลาสยูทิลิตี้เริ่มต้นอย่างเฉื่อยชา:
try (lazilyInitializedFileNameSupplier) {
// Some complex logic that might or might not
// invoke the code that creates the file
if (checkIfNeedToProcessFile()) {
doSomething(lazilyInitializedFileNameSupplier.get());
}
if (checkIfStillNeedFile()) {
doSomethingElse(lazilyInitializedFileNameSupplier.get());
}
}
// By now we are sure that even if the file was generated, it doesn't exist anymore
ฉันไม่ต้องการสร้างคลาสภายในเพราะฉันแน่ใจอย่างยิ่งว่าคลาสนี้จะไม่ถูกใช้ที่ใดก็ได้ยกเว้นวิธีที่ฉันต้องใช้ (และฉันอาจต้องการใช้ตัวแปรท้องถิ่นที่ประกาศในวิธีนั้นซึ่งอาจ เป็นvar
ประเภท)