যদি কোনও পদ্ধতির রিটার্নের ধরণের অকার্যকর থাকে তবে আমি কী ফিরিয়ে দেব? (অকার্যকর নয়!)


115

জাভাতে জেনেরিক্স ব্যবহারের কারণে আমি Voidরিটার্ন টাইপ হিসাবে একটি ফাংশন প্রয়োগ করতে পেরেছি :

public Void doSomething() {
    //...
}

এবং সংকলকটি দাবি করেছে যে আমি কিছু ফিরিয়ে দেব । আপাতত আমি কেবল ফিরে আসছি null, তবে আমি ভাবছি যে এটি কোডিংয়ের ভাল অনুশীলন কিনা ...

আমি জিজ্ঞেস করছি ভী OID না v OID। বর্গ Void, না সংরক্ষিত শব্দ void।

আমিও চেষ্টা করেছি Void.class, void, Void.TYPE, new Void()সবকিছু কোন রিটার্ন কিন্তু সব যে এ সব কাজ করে না। (কম-বেশি সুস্পষ্ট কারণে) ( বিশদটির জন্য এই উত্তরটি দেখুন )

  • সুতরাং কোন ফাংশনের রিটার্ন টাইপ হলে আমার কী ফিরতে হবে Void?
  • Voidক্লাসের সাধারণ ব্যবহার কী ?

উত্তর:


104

সুতরাং কোনও ফাংশনের রিটার্নের ধরণটি যদি থাকতে হয় তবে আমি কী ফিরে আসব Void?

ব্যবহার return null। Voidinstantiated করা যাবে না এবং নিছক জন্য একটি স্থানধারক Class<T>ধরণ void।

কিসের কথা Void?

উপরে উল্লিখিত হিসাবে, এটি একটি স্থানধারক। Voidআপনি কী ফিরে পাবেন যদি আপনি, উদাহরণস্বরূপ, কোনও রিটার্নের ধরণের সাথে কোনও পদ্ধতিটি দেখার জন্য প্রতিবিম্ব ব্যবহার করেন void। (প্রযুক্তিগতভাবে, আপনি ফিরে পাবেন Class<Void>)) এর অন্যান্য লাইনের সাথে এই লাইনগুলি ব্যবহার করে, যেমন আপনি একটি প্যারামিটারাইজ করতে চান Callable<T>।

জাভাতে জেনেরিক ব্যবহারের কারণে আমি এই ফাংশনটি প্রয়োগ করতে পেরেছি

আমি বলব যে যদি আপনার এই স্বাক্ষর সহ কোনও পদ্ধতি বাস্তবায়নের প্রয়োজন হয় তবে আপনার এপিআইতে কিছু চমত্কার হতে পারে। আপনি যা চান তার করার আরও ভাল উপায় আছে কিনা তা সাবধানতার সাথে বিবেচনা করুন (সম্ভবত আপনি কোনও আলাদা, ফলো-আপ প্রশ্নে আরও বিশদ সরবরাহ করতে পারেন?)। আমি কিছুটা সন্দেহজনক, যেহেতু এটি কেবল "জেনেরিকের ব্যবহারের কারণে" এসেছিল।


13
অকার্যকর ফিরে আসার পরে মোটেও মজাদার নয়। এটি কেবল যেমন কলযোগ্য <T> দ্বারা আদেশ দেওয়া যেতে পারে। কখনও কখনও আপনার কিছু ফেরত দেওয়ার দরকার হয় না তবে উদাহরণস্বরূপ রান্নেবল can
— বোম্বে

অকার্যকর এর বৈধ ব্যবহার আছে, যেমনটি আমি উল্লেখ করেছি। তবে তিনি বলেছিলেন যে "এটি কেবল জেনেরিক ব্যবহারের কারণে উঠে এসেছে"। এটি এমন শোনাচ্ছে যা তিনি কোনও সংগ্রহের জন্য কিছু করেছিলেন যা ভয়েড ব্যবহার করা দরকার, যা আমি বলব এটি একটি ব্যতিক্রমী ক্ষেত্রে।
— জন Feminella

সংগ্রহের সাথে এটি খুব আশ্চর্যজনক হবে would
— বোম্বে

ভয়েড.ক্লাস এবং ভয়েড.ক্লাস উভয়ই ক্লাস <অকার্যকর> তবে সেগুলি সমান নয়। অকার্যকর প্রায়শই মানচিত্রের মান হিসাবে জেনেরিক আর্গুমেন্ট হিসাবে ব্যবহৃত হয় (বা কালেকশনস.নিউসফ্রেমম্যাপ ব্যবহার করুন) এবং অ্যাক্সেসকন্ট্রোল.আর.ড্রাইভাইলিজডের ফেরত।
— টম হাটিন -

@ টম: হ্যাঁ এ কারণেই আমি "(প্রযুক্তিগতভাবে, আপনি ক্লাস <অকার্যকর> ফিরে পেয়েছেন।)" ট্যাগ করেছিলাম "" আমার কি সেই অংশটি সংশোধন করা উচিত বা আপনার কি মনে হয় এটি যথাযথ?
— জন ফেমেনিেলা

26

সেখানে একটি অকার্যকর instantiate করার কোনো উপায়, তাই একমাত্র জিনিস আপনি করতে পারেন আসতে নাল হয়।


13
আরও নির্ভুলভাবে, খারাপ কাজ না করে কোনও শূন্যতা ইনস্ট্যান্ট করার কোনও উপায় নেই।
— মাইকেল ময়র্স


20

আপনার দেওয়া অন্যান্য পরামর্শগুলি কেন কার্যকর হয় না তা স্পষ্ট করার জন্য:

Void.classএবং Void.TYPEএকই অবজেক্টের দিকে নির্দেশ করুন এবং টাইপ হয় Class<Void>, না Void।

এজন্য আপনি এই মানগুলি ফিরিয়ে দিতে পারবেন না। new Void()টাইপ হতে পারে Voidতবে কনস্ট্রাক্টরের অস্তিত্ব নেই। আসলে, Voidকোনও পাবলিক কনস্ট্রাক্টর নেই এবং তাই তা ইনস্ট্যান্ট করা যায় না: পলিমারফিক Voidছাড়া আপনার কোনও ধরণের অবজেক্ট থাকতে পারে না null।

আশাকরি এটা সাহায্য করবে! :-)


1
গৌণ সংশোধন: Void.TYPEনির্দেশ করে না Void.class। এটি নির্দেশ করে void.class।
— shmosel

1

অস্পষ্ট কারণে যদি আপনার এই প্রকারটি ব্যবহার করা আবশ্যক, তবে অবশ্যই নাল ফেরানো একটি বোধগম্য বিকল্প বলে মনে হচ্ছে, যেহেতু আমি মনে করি যে কোনওভাবেই ফেরতের মান ব্যবহার করা হবে না।
সংকলক আপনাকে যে কোনও উপায়ে কিছু ফিরিয়ে দিতে বাধ্য করবে।
এবং এই শ্রেণীর জনসাধারণের নির্মাতা রয়েছে বলে মনে হয় না তাই নতুন শূন্যস্থান () সম্ভব নয়।


আমি খুব দরকার না; এটা ঠিক কনভেনশন।
— টম হাটিন -

-2

ঠিক এই রকম.

public Class TestClass {
    public void testMethod () {
        return;
    }
}

2
ওপি বলল Void, না void। অন্যান্য উত্তর ইতিমধ্যে বিষয়টি বেশ ভালভাবে কভার করেছে বলে মনে হচ্ছে।
— ই_নেট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.