Lamda를 직렬화할 수 있나요?
Java 람다는 본질적으로 직렬화할 수 없습니다. 즉, 스트림에 직접 쓰고 나중에 다시 읽을 수 없습니다. 이는 다양한 컨텍스트에서 람다를 유지하거나 전송하려고 할 때 문제가 될 수 있습니다.
직렬화 수수께끼
다음 코드 조각을 고려하세요.
public static void main(String[] args) throws Exception { File file = Files.createTempFile("lambda", "ser").toFile(); try (ObjectOutput oo = new ObjectOutputStream(new FileOutputStream(file))) { Runnable r = () -> System.out.println("Can I be serialized?"); oo.writeObject(r); } try (ObjectInput oi = new ObjectInputStream(new FileInputStream(file))) { Runnable r = (Runnable) oi.readObject(); r.run(); } }
위 코드에서 람다 람다를 직렬화하려고 하면 NotSerializedException이 발생합니다. 이는 기본적으로 람다가 Java에서 직렬화할 수 없기 때문입니다.
우아한 람다 직렬화
이 문제를 해결하고 람다 직렬화를 활성화하려면 다음의 교차점을 활용할 수 있습니다. Java 8에 도입된 유형 기능. 이를 통해 캐스트에 대한 여러 범위를 지정하여 람다를 Runnable 및 Serialized를 모두 구현하는 객체로 효과적으로 변환할 수 있습니다. 인터페이스.
직렬화 문제를 우아하게 해결하는 업데이트된 코드는 다음과 같습니다.
Runnable r = (Runnable & Serializable)() -> System.out.println("Serializable!");
이 솔루션을 사용하면 이제 람다를 객체 스트림에 원활하게 기록하고 파일에 유지할 수 있습니다. 시스템에 저장되고 나중에 오류나 예외 없이 역직렬화되어 실행됩니다.
위 내용은 Java Lambda를 직렬화할 수 있으며 어떻게 직렬화할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!