1
我有番石榴可選不明原因的編譯錯誤,我有這樣的測試表明:與可選的編譯錯誤在泛型類
package com.livingobjects.pmin.test;
import com.google.common.base.Optional;
import org.junit.Test;
public class OptionalTest {
public class ContainOptional<T> {
T id;
Optional<String> label;
public ContainOptional(T id, Optional<String> label) {
this.id = id;
this.label = label;
}
public T getId() {
return id;
}
public Optional<String> getLabel() {
return label;
}
}
@Test
public void shouldGetOptional() throws Exception {
ContainOptional co = new ContainOptional<>(42, Optional.of("H2G2"));
String label = co.getLabel().get(); // Can not compile
Optional<String> opt = co.getLabel(); // Can
String labelOpt = opt.get(); // compile
}
}
當我試圖從一個容器通用對象,我需要使用中間變量可選而不是內聯代碼。 當我使用co.getLabel().get();
的連鎖調用時,Optional.get返回Object而不是String?
編輯:我用番石榴17.0和Java 1.7.0_51
(不介意我以前的評論;我誤解了這個問題。)這不是特定於番石榴,但似乎是泛型的一個普遍問題。看起來如果沒有指定通用參數(此處爲「T」),其他通用部分(即使不依賴於「T」的通用部分)也會回退到「對象」。但即使你只是'ContainOptional > co = ...'它的工作原理。 – 2014-08-29 08:46:13
右加'>'解決問題。我發現奇怪的是,所有通用都受到影響... 感謝你兩個 – Marthym 2014-08-29 09:05:59