簡體   English   中英

Java:對靜態類的存儲引用是可變的

[英]Java: Store reference to static class is variable

我需要將對類的引用存儲在變量中,以便可以在變量上調用該類的靜態方法。

Main.java

public class Main {

    private static SomeClass cls;

    private static void main(String[] args) {
        **cls = SomeClass;**
        cls.doSomething();
    }

SomeClass.java

public class SomeClass() {
    public static doSomething() {
    }
}

cls = SomeClass在這里不起作用,但是我也不想實例化SomeClass。

有人可以幫忙嗎?

這是沒有道理的。

你可以寫

private static SomeClass cls = null;

(或將其保留為未分配狀態,因為默認值始終為null

cls.doSomething()

將不會拋出NullPointerException並將調用靜態方法。

但是,沒有理由這樣做。 無論您為cls變量分配什么內容,它都將始終調用SomeClass.doSomething() ,因此消除該變量並僅調用SomeClass.doSomething()更為有意義。

想法是,cls可以根據上面代碼中未提供的某些條件引用多個類

這個想法行不通。 cls變量的編譯時間類型將確定所調用的static方法的類。 由於它只能具有單個類型,因此它將始終是相同的static方法。

您可以將反射用於此要求。 下面是示例:

public class Reference {

    public static Class clazz = null;

    public static void main(String[] args) {
        try {
            refer(Something.class);
        } catch (NoSuchMethodException | SecurityException | IllegalAccessException | IllegalArgumentException
                | InvocationTargetException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    public static void refer(Class clazzToBeCalled) throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
        clazz = clazzToBeCalled; //No need to store it on class level
        Method methodToBeCalled = clazz.getMethod("doSomething");
        methodToBeCalled.invoke(null);
    }
}

暫無
暫無

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

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