[英]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.