د جاوا چک شوي استثناوې د C د بریښنا د پروسس میکانیزم په پرتله یو لوی پرمختګ دی. د وخت په پرتله او تجربې کثافاتو سره، موږ په ټولیزه توګه پایله کوو چې موږ بل نه وه. په هرصورت، د جاوا د ثبات په اړه تمرکز په خپل موجود API کې استثناوې چمتو شوي دي. د جاوا 8 د "چیک شوي استثناوې لوی دي" ټینډ وروسته lambdas راټول. د فعالیتو انټرنیټونه نه د چیک شوي استثنايې راټولوي. په دې پست کې، زه به د خپل خوندي استثنايي ډاونلوډ کوډ د lambdas سره مطابقت کولو لپاره درې مختلف لارښوونې ډیزاین کولی شي. د ستونزو په کوډ کې. د ساده غیرقانوني چڼاسکه په اړه فکر وکړئ. public class Foo { public String throwing(String input) throws IOException { return input; //1 } } د بدن د راټولولو لپاره موجود دی؛ د هغې دقیق محتویات غیر مهم دی. د پروژې د A او راځي a دا د A شکل لري ، نو موږ کولی شو دا په توګه کارول: String String Function<I, O> var foo = new Foo(); List.of("One", "Two").stream() .map(string -> foo.throwing(string)) .toList(); د مخکښ کوډ د کمپیلنگ غلطۍ سره ناکام کیږي: unreported exception IOException; must be caught or declared to be thrown .map(string -> foo.throwing(string)).toList(); ^ 1 error د بریښنا حل کولو لپاره، موږ باید د ټوټه کوډ په یو try-catch بلوک کې وښيي: List.of("One", "Two").stream() .map(string -> { try { return foo.throwing(string); } catch (IOException e) { return ""; } }).toList(); په دې وخت کې، کوډ کوډ کوي، مګر د لامبډا اصلي هدف ته شکست کوي: د مخکښ او قناعت وړ دی. د ښه لاره. موږ کولی شو په بشپړه توګه د ډیزاین د نمونوي a سره د ګازو . Function apply() interface ThrowingFunction<I, O, E extends Exception> { O apply(I i) throws E; } موږ کولی شو په داسې حال کې د پلټنې بدلولو لپاره د پوښونو وړاندې کړي په منظم ډول . Function Function class LambdaUtils { public static <I, O, E extends Exception> Function<I, O> safeApply(ThrowingFunction<I, O, E> f) { return input -> { try { return f.apply(input); } catch (Exception e) { return ""; } }; } } د اوسط سره، د تماس کوډ کولای شي په دې ډول ښه شي: var foo = new Foo(); List.of("One", "Two").stream() .map(string -> LambdaUtils.safeApply(foo::throwing)) //1 .toList(); د مخکښ کوډ بیا کتابتونونه د نجات لپاره. په لامبډا کې د غیرقانوني کډ په تماس کې ترټولو ساده لاره د کتابتون کارولو شامل دي. د دوو کتابتون چې زه پوه د دې وړتیا وړاندې کوي: د Apache Commons Lang 3 وینیل دلته څنګه چې موږ کولی شو د Commons Lang 3 کوډ په کارولو سره د دې کوډ ته ورسوي: var foo = new Foo(); FailableFunction<String, String, IOException> throwingFunction = foo::throwing; //1 List.of("One", "Two").stream() .map(throwingFunction) .recover(e -> "") //2 .toList(); Commons په اوږدو کې 3 موډلونه a throwing function recover() د مخکښ catch بلوک کې تنظیم شوي ارزښت رامینځته کوي د کتابتونونه زما د بحث وړ ډیزاین په اړه ښه دي، مګر د مفکورې ورته دي. د خپل جوړولو یا د کتابتون کارولو لپاره د فیصلہ د مختلفو عوامل پورې اړه لري چې د دې پست څخه بهر دي. دلته تاسو ته مرسته وکړي. ځینې معیارونه د کنټرول شوي استثناوو لګولو چمتو شوي استثناونه د کمپیل وخت په اړه ستونزه دي. د جاوا زبان مشخصات بیان کوي: د جاوا پروګرامنگ زبان لپاره یو کمپیوټر د کمپیوټر وخت کې چمتو کوي چې یو پروګرام د کنټرولونکي شامل دي د کنټرول شوي استثناوو لپاره، د تحلیل کولو له لارې چې کوم کنټرول شوي استثناوو کولی شي د پروګرام یا کنټرولر ترسره کولو له امله وي. د هر کنټرول شوي استثناوو لپاره چې یو ممکن پایلې ده، د پروګرام (§8.4.6) یا کنټرولر (§8.8.5) د کنټرول کولو لپاره د استثناونو کچه باید د کنټرول شوي استثناوو کچه یا د کنټرول شوي استثناوو کچه د کنټرول کولو وخت د کنټرولونکي شتون لپاره د کنټرول کولو لپاره د کنټرول کولو لپاره ډیزاین شوی دی چې د کنټرول شوي استثناوو کچه کم کړي -- 11.2 د استثناوو د کمپیل-Time چیک د جاوا پروګرامنگ زبان لپاره یو کمپیوټر د کمپیوټر وخت کې چمتو کوي چې یو پروګرام د کنټرولونکي شامل دي د کنټرول شوي استثناوو لپاره، د تحلیل کولو له لارې چې کوم کنټرول شوي استثناوو کولی شي د پروګرام یا کنټرولر ترسره کولو له امله وي. د هر کنټرول شوي استثناوو لپاره چې یو ممکن پایلې ده، د پروګرام (§8.4.6) یا کنټرولر (§8.8.5) د کنټرول کولو لپاره د استثناونو کچه باید د کنټرول شوي استثناوو کچه یا د کنټرول شوي استثناوو کچه د کنټرول کولو وخت د کنټرولونکي شتون لپاره د کنټرول کولو لپاره د کنټرول کولو لپاره ډیزاین شوی دی چې د کنټرول شوي استثناوو کچه کم کړي - د 11.2 د استثناوو د کمپیل-Time چیک موږ کولی شو په امکان کې د کمپیوټر ته د دې چک د کمپیوټر پلگ ان له لارې مخنیوی کړي. یا یو کتابتون چې دا کوي. دا هغه وخت دی چې Manifold په سټین کې راځي. Manifold یو جاوا کمپیلر پلگ ان دی. د دې لپاره چې ستاسو د جاوا پروژو سره د لوړ تولیداتو ځانګړتیاوې بشپړ کړئ. د بریښنايي ژبه پرمختګونه د پراختیا تولیدات زیاتوي. د پراختیا طریقې د حقیقي delegation د ملکیت د اختیاري پارامترونو (د نوي!) دوه ګوني بیانات د کارپوه کارپوه د واحد Expressions د Java Template انجن د Preprocessor ... او نور -- څه دی Manifold Manifold یو جاوا کمپیلر پلگ ان دی. د دې لپاره چې ستاسو د جاوا پروژو سره د لوړ تولیداتو ځانګړتیاوې بشپړ کړئ. د بریښنايي ژبه پرمختګونه د پراختیا تولیدات زیاتوي. د پراختیا طریقې د حقیقي delegation د ملکیت د اختیاري پارامترونو (د نوي!) دوه ګوني بیانات د کارپوه کارپوه د واحد Expressions د Java Template انجن د Preprocessor ... او نور - د هغه څه چې Manifold Disclaimer: زه د Manifold کارولو پاملرنه نه کوي. دا تاسو سره کار کوي چې تاسو د جاوا څخه توپیر لري. په دې وخت کې، تاسو به په مستقیم ډول د Kotlin کارولو لپاره ښه وي. د Manifold کارولو لپاره د چیک شوي استثناوو د دوو مرحله پروسه ده. لومړی، موږ د Manifold runtime ته د پروژې اضافه کوو: <dependency> <groupId>systems.manifold</groupId> <artifactId>manifold-rt</artifactId> <version>${manifold.version}</version> <scope>provided</scope> </dependency> وروسته، موږ د کمپیوټر پلگ ان ترتیب کوو: <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.0</version> <configuration> <source>11</source> <target>11</target> <encoding>UTF-8</encoding> <compilerArgs> <arg>-Xplugin:Manifold</arg> </compilerArgs> <annotationProcessorPaths> <path> <groupId>systems.manifold</groupId> <artifactId>manifold-exceptions</artifactId> <version>${manifold.version}</version> </path> </annotationProcessorPaths> </configuration> </plugin> </plugins> </build> په دې وخت کې، موږ کولی شو چیک شوي استثناوې د غیر چیک شوي په توګه درلود. var foo = new Foo(); List.of("One", "Two").stream() .map(string -> foo.throwing(string)) //1 .toList(); د ستونزو سره نښلول د پایلو په دې پست کې، زه په جاوا کې د لامبډس سره د چک شوي استثناوو په ګډه کولو ستونزه حل کړم. زه څو اختیاراتو لیست کړم: د try-catch بلاک، د چټک کولو دنده، د کتابتون، او Manifold. زه امیدوارم چې تاسو د هغوی په منځ کې یو غوره کړئ چې ستاسو سره مناسب وي. To go further: د Apache Commons Lang 3 وینیل د Java Lambda Expressions په اړه د Vavr کارولو په Lambda بیان کې استثناوې د Checked استثناوو سره سلام وکړئ د جاوا د چک شوي استثنايي ستونزه حل کول په اصل کې نشر شوي په A Java Geek په 18th جنوري، 2026 د جاوا Geek