簡體   English   中英

如何將 Class 作為 function 參數傳遞

[英]How to pass a Class as an function parameter

我知道以前有人問過這個問題,但我不太明白/答案對我沒有幫助,所以我很感激在這件事上的一些幫助,因為我開始學習 Java。

我想創建一個 function 來計算 class 的實例並返回一個數字,例如我有:

Public class A{}
Public class A.a extends A{}
Public class A.b extends A{}

我有一個 A[] 數組,其中包含 A、Aa 和 Ab 的實例,我想計算該數組中 A、Aa 或 Ab 的實例,所以我創建了這些函數:

int countA.a(A[] array){
int counter = 0;
  for(int i = 0; i < array.length; i++){
    if(array[i] instanceof A.a){
      counter++;
    }
  }
  return counter;
}

int countA.b(A[] array){
int counter = 0;
  for(int i = 0; i < array.length; i++){
    if(array[i] instanceof A.b){
      counter++;
    }
  }
  return counter;
}

我的問題是,我該怎么做:

int countInstances(A[] array, class n){
int counter = 0;
  for(int i = 0; i < array.length; i++){
    if(array[i] instanceof n){
      counter++;
    }
  }
  return counter;
}

謝謝你的耐心!

您可以使用Class class:

int countInstances(A[] array, Class<? extends A> n){

而不是instanceof ,您應該使用Class class 中的isInstance方法。

if(n.isInstance(array[i])){
  counter++;
}

用法:

int count = countInstances(someArray, SubclassOfA.class);

您可以使用A.class Class或者使用

A myA = new A();
Class<?> clazzOfA = myA.getClass();

並將其作為Class<?>類型的參數傳遞

所以在你的例子中,是這樣的:

int instances = countInstances(myArray, A.b.class);

int countInstances(A[] array, Class<?> n){
int counter = 0;
  for(int i = 0; i < array.length; i++){
    if(array[i].getClass() == n){
      counter++;
    }
  }
  return counter;
}

一些例子:

boolean hasSameClass(Object type, Class<?> n){
    return type.getClass() == n;
}

hasSameClass(new LinkedList(), ArrayList.class);    // false
hasSameClass(new ArrayList(), LinkedList.class);    // false
hasSameClass(new ArrayList(), ArrayList.class);     // true
hasSameClass(new ArrayList(), List.class);          // false

我知道以前有人問過這個問題,但我不太明白/答案對我沒有幫助,所以我希望能在這件事上得到一些幫助,因為我開始學習 Java。

我想創建一個 function 來計算 class 的實例並返回一個數字,例如我有:

Public class A{}
Public class A.a extends A{}
Public class A.b extends A{}

我有一個 A[] 數組,其中包含 A、Aa 和 Ab 的實例,我想計算該數組中 A、Aa 或 Ab 的實例,所以我創建了這些函數:

int countA.a(A[] array){
int counter = 0;
  for(int i = 0; i < array.length; i++){
    if(array[i] instanceof A.a){
      counter++;
    }
  }
  return counter;
}

int countA.b(A[] array){
int counter = 0;
  for(int i = 0; i < array.length; i++){
    if(array[i] instanceof A.b){
      counter++;
    }
  }
  return counter;
}

我的問題是,我該怎么做這樣的事情:

int countInstances(A[] array, class n){
int counter = 0;
  for(int i = 0; i < array.length; i++){
    if(array[i] instanceof n){
      counter++;
    }
  }
  return counter;
}

謝謝你的耐心!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM