java بالانجليزي ما هو الغرض من قائمة<Void>؟



معنى results (3)

أوافق ، إنه غريب.

يمكنني أن أرى استخدامًا لها إذا كنت تريد توسيع فئة عامة وإرجاع الفراغ من طريقة ما. لقد صدمت في حالة كنت أريد استخدام int وكان لا بد من استخدام Integer لأن الأدوية الوراثية جافا لا تحب الأنواع البدائية.

public interface ObjectUserPool<E, T> {
    public E useObject(T o);
}

public class NonReturningObjectUserPool extends ObjectUserPool<Void, Integer> {
    public Void useObject(Integer i);
}

أعتقد أن هذا هو ما تقوله واجهة برمجة التطبيقات جافا ، على الرغم من أن نكون صادقين لا أستطيع حقاً العثور على استخدام لـ NonReturningObjectUserPool .

https://ffff65535.com

لم أكن أعرف حتى أن هذا كان قابلاً للتنفيذ ، لكنني رأيت بينما أطلع على بعض التعليمات البرمجية عبر الإنترنت طريقة مع توقيع مثل هذا:

public List<Void> read( ... )

... ماذا؟ هل هناك سبب للقيام بهذا؟ ماذا يمكن لهذه List حتى عقد؟ بقدر ما كنت على علم ، لا يمكن إنشاء كائن Void .


إحدى الحالات التي قد يكون من المفيد فيها إذا كنت تريد إرجاع مجموعة من قيم الإرجاع من إحدى الوظائف. قل

static List<T> forEach(Func<A,T> func, List<A> items) {
   List<T> ret = new List<T>();
   for(int i = 0; i< items.length; i++) {
     ret.add(func.call(items[i]);
   }
   return ret;
}

public static void main() {
  ...
  List<Void> boringResult = 
   forEach(
    new Func<Void, Integer> {@override Void call(Integer i) {...}});
}

ليس هذا مفيدًا ولكن يمكنك أن ترى حالة حيث كانت مطلوبة.


List<Void> أمر غريب. يمكن أن تحتوي فقط على عناصر null ، حيث لا يمكنك إنشاء كائن من نوع Void . لا أعتقد أن هناك استخدامًا عمليًا لمثل هذا الأمر.

Void هو جزء من java.lang . انها ليست كلمة خاصة أو أي شيء. إنه "نوع زائف" (وفقًا للمستندات) يستخدم كمالك مكان لتمثيل كائن Class المطابق void ، كما هو الحال في Class<Void> . من المستندات للفصل :

يتم أيضًا تمثيل أنواع Java البدائية ( boolean ، byte ، char ، short ، int ، long ، float و double ) ، وكذلك الكلمة المفتاحية void ككائنات Class .

توجد فئة Void بشكل أساسي من أجل الجزء الأخير من هذا ، بحيث يمكنك الكتابة:

Class<Void> voidType = void.class; // == Void.TYPE

تمامًا كما يمكنك الكتابة:

Class<Integer> intType = int.class; // == Integer.TYPE




void