簡體   English   中英

Java:如何“實例化參數”

[英]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);
}

但是有兩個注意事項:

  1. 許多instanceof檢查通常表明設計不正確。

  2. 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.

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