[英]Java: how to “instanceof argument”
我努力了:
package ro.ex;
import java.io.IOException;
import java.lang.reflect.Type;
class Ex {
public boolean isIns(Object o, Class t) {
o instanceof t;
}
public static void main(String[] args) throws IOException {}
}
上面的代碼將引發未知類“ t”
我的問題是:如何傳遞以上代碼。
更新:
以下代碼無法通過intellij idea語法檢查器
public boolean isIns(Object o, Class<?> t) {
return o instanceof t;
}
所以正確的想法是:
public boolean isIns(Object o, Class<?> t) {
return t.isAssignableFrom(o.getClass());
}
更簡單的方法是:
package ro.ex;
import java.io.IOException;
import java.lang.reflect.Type;
class Ex {
public boolean isIns(Object o, Class t) {
return t.isInstance(o);
}
public static void main(String[] args) throws IOException {
Object r = new Ex().isIns("", String.class);
System.out.println(r + "\t\t" + new Exception().getStackTrace()[0].getFileName() + ":" + new Exception().getStackTrace()[0].getLineNumber());
}
}
如果編寫x instanceof t
,則t
必須是一個類。 在isIns
方法中, t
不是類,它是Class
類型的變量。
但是,類Class
確實提供了一些方法,您可以通過這些方法確定某個其他類是否是它的子類: Class.isAssignableFrom(Class)
。 因此,您可以將方法更改為:
public boolean isIns(Object o, Class t)
{
return t.isAssignableFrom(o.getClass());
}
(我還更改了您的代碼,以便將的結果返回給調用方。)
我不知道您要使用該方法做什么,但是instanceof語法錯誤。
public boolean isIns(Object o, Class t) {
return o instanceof t;
}
instanceof
關鍵字使用有效的類名而不是變量名進行檢查。 那就是編譯器錯誤。
例如: o instanceof String
,如果您像下面這樣編寫,它將無法編譯
public boolean isIns(Object o, String str) {
return o instanceof str; //err, o instance of String is correct way to check.
}
我對您的方法簽名進行了些微更改,以匹配該語句。
在下面的代碼中, t
應該是Java類的名稱(例如String
)。 在您的代碼中,您傳遞了不合適的變量名:
public void isIns(Object o, Class t) {
o instanceof t;
}
由於instanceof
檢查是單行的,因此我不確定為什么要將它包裝在方法中。 但是,如果您堅持要這樣做,也許這就是您想要的:
public static boolean isIns(Object o, Class<?> t) {
return c.isInstance(o);
}
但是有兩個注意事項:
許多instanceof
檢查通常表明設計不正確。
與isIns(...)
相比,Java程序員更願意看到instanceof
。
您應該使用Class類中instanceof的動態等效項。 http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html#isInstance(java.lang.Object)
public void isIns(Object o, Class t) {
t.isInstance(o);
}
如果需要,請檢查是否為空。
也許您想要這樣的東西?
public class test2 {
class c {
}
public test2() {
c obj = new c();
System.out.println(isIns(obj));
}
public boolean isIns(Object o) {
return (o instanceof c);
}
public static void main(String argv[]) {
new test2();
}
}
編輯:刪除了無意義的類參數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.