ما لا عودة نوع من الأسلوب هو الفراغ ؟ (لا باطل!)

StackOverflow https://stackoverflow.com/questions/676663

  •  21-08-2019
  •  | 
  •  

سؤال

بسبب استخدام الأدوية في جافا انتهى بي الأمر في الحاجة إلى تنفيذ وظيفة بعد Void كما نوع الإرجاع:

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

و المترجم مطالب أن أعود شيء.الآن أنا مجرد العودة null, ولكن أنا أتساءل إذا كان هذا هو الترميز جيدة الممارسة...

أنا أسأل عن Void لا void.الطبقة Void, لا محفوظة الكلمة void.

لقد حاولت أيضا Void.class, void, Void.TYPE, new Void(), لا عودة على الإطلاق, ولكن كل ذلك لا تعمل على الإطلاق.(أكثر أو أقل وضوحا من الأسباب) (انظر هذا الجواب لمزيد من التفاصيل)

  • فما أنا من المفترض أن يعود إذا كان العائد نوع الوظيفة Void?
  • ما هو الاستخدام العام Void الفصل ؟
هل كانت مفيدة؟

المحلول

فما أنا من المفترض أن يعود إذا كان العائد نوع من وظيفة يجب أن يكون Void?

استخدام return null. Void لا يمكن إنشاء مثيل و هو مجرد عنصر نائب Class<T> نوع من void.

ما الفائدة من Void?

كما ذكر أعلاه, هو عنصر نائب. Void هو ما سوف تحصل عليه مرة أخرى إذا ، على سبيل المثال ، استخدام انعكاس للنظر في الأسلوب مع عودة نوع من void.(من الناحية الفنية, سوف نعود Class<Void>.) وقد متنوعة أخرى يستخدم على طول هذه الخطوط ، مثل إذا كنت تريد أن parameterize a Callable<T>.

بسبب استخدام الأدوية في جافا انتهى بي الأمر في الحاجة إلى تنفيذ هذه المهمة

أود أن أقول أن شيئا ما قد يكون غير تقليدي مع API الخاص بك إذا كنت في حاجة إلى تنفيذ الأسلوب مع هذا التوقيع.النظر بعناية في ما إذا كان هناك طريقة أفضل للقيام بما تريد (ربما كنت يمكن أن توفر المزيد من التفاصيل في مختلف متابعة السؤال؟).أنا قليلا المشبوهة ، لأن هذا فقط جاء "بسبب استخدام الأدوية".

نصائح أخرى

لا يوجد طريقة مثيل الفراغ ، لذلك الشيء الوحيد الذي يمكن عودة باطل.

return null هو الطريق للذهاب.

أن تجعل من الواضح لماذا اقتراحات أخرى أعطيته لا تعمل:

Void.class و Void.TYPE أشر إلى نفس الكائن و هي من نوع Class<Void>, وليس من Void.

هذا هو السبب في أنك لا يمكن أن تعود تلك القيم. new Void() سيكون من نوع Void ولكن هذا البناء لا وجود لها.في الواقع ، Void لا المنشئات العامة و لذلك لا يمكن إنشاء مثيل:أنت لا يمكن أبدا أن يكون أي كائن من نوع Void باستثناء متعددة الأشكال null.

ويساعد هذا الأمل!:-)

إذا لأسباب غامضة ، يجب استخدام هذا النوع, ثم في الواقع تعود فارغة يبدو أن يكون خيارا معقولا ، منذ أفترض العودة لا يمكن استخدامها على أي حال.
المترجم سوف يجبرك على العودة شيئا على أية حال.
و هذه الفئة لا يبدو أن يكون منشئ العام الجديد بحيث الفراغ() غير ممكن.

فقط مثل هذا.

public Class TestClass {
    public void testMethod () {
        return;
    }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top