Generics - اكتب عدم تطابق عند توفير نوع ملموسة لفئة عامة

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

سؤال

سؤال جافا البسيط جافا: لدي فئتان - أحدهما يستخدم الأداء العام لتحديد نوعه ، والآخر يمتد هذا الفئة التي توفر نوعًا ملموسًا.

public class Box<Item> {
    ...
}


public class Toolbox extends Box<Tool>{
    ...
}

بالنظر إلى أن مربع الأدوات يمتد يوفر أداة كنوع فعلي للعنصر النائب العام ، فقد اعتقدت أنه يجب أن يكون من الممكن القيام بشيء مثل هذا:

Box<Tool> box = new Box();

Toolbox toolbox = box; 

ومع ذلك ، يبدو أن هذا يسبب عدم تطابق النوع. لماذا هذا؟

هل كانت مفيدة؟

المحلول

Box<Item> هو النوع العام غير المقيد. Box<Tool> هو نسخة محددة معينة من نفس النوع العام. Toolbox هي فئة فرعية من Box<Tool> وبالتالي هو نوع منفصل من Box<Tool>.

نصائح أخرى

إنها ليست مشكلة عامة. مشكلتك هي أنك تقوم بتعيين كائن من نوع أقل تحديدًا لمتغير من نوع أكثر تحديدًا.

سيكون لديك نفس المشكلة إذا حاولت تعيين كائن إلى متغير سلسلة ، على الرغم من أن سلسلة تمديد الكائن.

ومع ذلك ، يجب أن تكون قادرًا على الكتابة Box<Tool> box = new Toolbox(); مع بنية الفصل المعطى. ليس فقط العكس.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top