কোডআরভিউতে কিছু ওজনের কিছু প্রস্তাবনার পরে আমি সি # থেকে জাভাতে স্যুইচ করছি। সুতরাং, আমি যখন এলডাব্লুজেজিএল-এর দিকে তাকাচ্ছিলাম, তখন একটি জিনিস আমার মনে পড়েছিল যে পদ্ধতিটি Display
চালিত হয়েছিল সেই একই থ্রেডে অবশ্যই প্রতিটি কল সম্পাদন করা উচিত Display.create()
। এটি মনে রাখার পরে, আমি এমন একটি ক্লাস বেতার দিয়েছি যা দেখতে কিছুটা এইরকম দেখাচ্ছে।
public class LwjglDisplayWindow implements DisplayWindow {
private final static int TargetFramesPerSecond = 60;
private final Scheduler _scheduler;
public LwjglDisplayWindow(Scheduler displayScheduler, DisplayMode displayMode) throws LWJGLException {
_scheduler = displayScheduler;
Display.setDisplayMode(displayMode);
Display.create();
}
public void dispose() {
Display.destroy();
}
@Override
public int getTargetFramesPerSecond() { return TargetFramesPerSecond; }
@Override
public Future<Boolean> isClosed() {
return _scheduler.schedule(() -> Display.isCloseRequested());
}
}
এই শ্রেণিটি লেখার সময় আপনি খেয়াল করবেন যে আমি একটি পদ্ধতি তৈরি করেছি isClosed()
যা একটি রিটার্ন বলে Future<Boolean>
। এটি আমার Scheduler
ইন্টারফেসে একটি ফাংশন প্রেরণ করে (যা কোনও চারপাশে মোড়কের চেয়ে বেশি কিছু নয় ScheduledExecutorService
the schedule
পদ্ধতিতে লেখার সময় Scheduler
আমি লক্ষ্য করেছি যে আমি যে ফাংশনটি পাশ করেছে তা উপস্থাপনের জন্য একটি Supplier<T>
যুক্তি বা একটি Callable<T>
যুক্তি ব্যবহার করতে পারি ScheduledExecutorService
an এতে কোনটি ছিল না জন্য ওভাররাইড Supplier<T>
কিন্তু আমি লক্ষ্য করেছি যে, ল্যামডা অভিব্যক্তি () -> Display.isCloseRequested()
আসলে উভয় সঙ্গে সামঞ্জস্যপূর্ণ ধরনের Callable<bool>
এবং Supplier<bool>
।
আমার প্রশ্নটি হল, শব্দার্থগতভাবে বা অন্যথায় এই দুটিয়ের মধ্যে কোনও পার্থক্য রয়েছে - এবং যদি তা হয় তবে এটি কী, তাই আমি এটি মেনে চলতে পারি?