簡體   English   中英

Java中是否可以實現動態重載解析?

[英]Is dynamic overload resolution possible in Java?

所以我有一類重載方法,如下所示:

class Foo {
    public void test(Object value) {
        ...
    }

    public void test(String value) {
        ...
    }
}

我需要根據其類型將bean的屬性值傳遞給其中一個方法,但在運行時之前我不知道實際的屬性類型。 例如

public void run(Object bean, String propertyName) {
    Foo foo = new Foo();
    foo.test(PropertyUtils.getProperty(bean, propertyName));
}

BTW, PropertyUtils.getProperty()是一個輔助方法,它返回bean上指定屬性的值。 PropertyUtils.getProperty()返回一個Object,因此將始終調用test(Object value)並忽略實際的屬性類型。

我可以在運行時中找出propery類型,即使它的值為null。 在Java中有動態轉換這樣的東西嗎? 如果沒有,是否有一種方法可以使用正確的參數類型調用重載方法?

覆蓋是Java中的動態綁定。 重載具有靜態綁定,並且調用哪個函數是在編譯時確定的,而不是在運行時確定的。 看到這個問題。

因此,您不能使用重載進行運行時選擇方法。 建議你在java中使用其他OOP設計模式之一,或者至少是instanceof

public void dispatch(Object o)
{
   if (o instanceof String)
       handleString((String)o);
   else if (o instanceof File)
       handleFile((File)o);
   else
       handleObject(o);
}

這是訪客模式的工作。

在Java中編譯時發生重載的方法解析。 您必須自己完成解決方案(交換機,if-then-else梯形圖或表查找),或者找到可以用Java實現的不同模式。

我不確定你想要回答這個問題。 你有興趣建立一個情況

test((String)x)

不做同樣的事情

test((Object)x)

對於xString s。 這是一個壞主意™,只會導致很多混亂。 如果您真的想要不同的行為,請使用不同的方法名稱。

如果x是一個String ,只需使test(Object x) dispatch to test(String x) ,然后你就不必擔心調用哪個test方法了。

暫無
暫無

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

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