簡體   English   中英

如何確定Java泛型是否實現特定接口?

[英]How can I determine if Java generic implements a particular interface?

如何確定Java泛型是否實現特定接口?

我嘗試了幾種不同的方法,但它們都導致了“無法找到符號......變量T”的錯誤。

第一次嘗試

public abstract class AbstractClass<T> {
    public void doFoo() {
        if (T instanceof SomeInterface){
            // do stuff
        }
    }
}

第二次嘗試

public abstract class AbstractClass<T> {
    public void doFoo() {
        if (SomeInterface.class.isAssignableFrom(T)) {
            // do stuff
        }
    }
}

你不能。

解決方法1

使用對象的類添加構造函數。

public abstract class AbstractClass<T> {

    private Class<T> clazz;

    public AbstractClass(Class<T> clazz) {
        this.clazz = clazz;
    }

    public void doFoo() {
        if (clazz instanceof SomeInterface){
            // do stuff
        }
    }
}

解決方法2

T類型添加約束,使用T extends SomeInterface ,從而將類型T限制為SomeInterface的子類型。

public abstract class AbstractClass<T extends SomeInterface> {
    public void doFoo() {
        // do stuff
    }
}

綁定它。

public abstract class <T extends SomeInterface> { }

然后,當你作為方法的參數傳遞時,你保證它至少是 SomeInterface

從您的方法來看,沒有辦法,因為您沒有在代碼中的任何位置引用T的實例。 如果你為它添加了一個參數,你至少可以得到更多。

public void doFoo(T obj) { }

暫無
暫無

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

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