我想知道是否有可能在Java中的方法範圍內引入類型變量。也就是說,在方法體內限制它們的範圍。在Java中的範圍有限的類型變量
但是,我並沒有試圖描述抽象中的問題,而是讓我用我的具體問題來說明問題。我有一對夫婦,看上去有點像這樣的類:
public class Settings {
public static abstract class Setting<T> {
public T value;
public abstract T fallbackvalue();
}
private final List<Setting<?>> settings;
}
我現在想編寫一個函數,在Settings
,所有設置的值設置爲自己的回退值由抽象方法提供。我首先想到的是做這樣的:
public void reset() {
for(Setting<?> setting : settings)
setting.value = setting.fallbackvalue();
}
然而,在第二以爲這是相當明顯的,爲什麼這不起作用; setting.value的捕獲<?>
與setting.fallbackvalue()
的捕獲不同。艾爾戈,我需要一些方法來統一捕捉。這是可能解決這個問題是這樣的:
private static <T> void reset1(Setting<T> s) {
s.value = setting.fallbackvalue();
}
public void reset() {
for(Setting<?> setting : settings)
reset1(setting);
}
顯式類型變量<T>
爲reset1
統一了捕獲方便,但它顯然是世界上最醜陋的東西來介紹這個功能,污染命名空間,雜亂只是爲了滿足類型系統而使代碼不易讀取。
難道我不能在reset
的身體內做到這一點嗎?我想要做的僅僅是這樣的:
public void reset() {
for(Setting<?> setting : settings) {
<T> {
Setting<T> foo = setting;
foo.value = foo.fallbackvalue();
}
}
}
這不是在世界上最漂亮的事情,但至少在我眼裏它比上面的變異遠不如strainful。唉,這是不可能的;但是什麼可能呢?
恐怕我不得不承認你是對的。更多的搜索似乎通常提出「reset1」方法作爲解決問題的方式。這太糟糕了。 – Dolda2000