这是我的问题的后续跟进:奇怪的Java泛型.
如果我有这样的代码:
Casts.<X, T> cast(iterable[index]);
Run Code Online (Sandbox Code Playgroud)
我可以添加静态导入并执行:
<X, T> cast(iterable[index]);
Run Code Online (Sandbox Code Playgroud)
Eclipse不允许这样做.但是在Eclipse中看到如此多的静态导入错误后,我并不确定.
我必须发现我的项目中有Java代码,它在Eclipse中编译并运行良好,但在javac中抛出了编译错误.
一个独立的片段:
import java.util.HashSet;
import java.util.Set;
public class Main {
public static void main(String[] args) {
Set<Integer> setOfInts = new HashSet<Integer>();
Set<Object> setOfObjects = covariantSet(setOfInts);
}
public static <S, T extends S> Set<S> covariantSet(Set<T> set) {
return new HashSet<S>(set);
}
}
Run Code Online (Sandbox Code Playgroud)
在javac中编译返回:
Main.java:10: incompatible types
found : java.util.Set<java.lang.Integer>
required: java.util.Set<java.lang.Object>
Set<Object> setOfObjects = covariantSet(setOfInts);
^
Run Code Online (Sandbox Code Playgroud)
此错误现在阻止在Maven中构建项目.由于Eclipse编译器构建得更宽容,我现在必须假设片段的定义和用法如上所述,静态方法是无效的Java?
我使用JAXB来创建XML消息.我需要创建的XML(为了简单起见):
<request>
<header/>
</request>
Run Code Online (Sandbox Code Playgroud)
我的代码看起来像这样:
import javax.xml.bind.annotation.*;
@XmlRootElement(name = "request")
public class Request {
private String header;
@XmlElement(required=true)
public String getHeader() {
return header;
}
public void setHeader(String header) {
this.header=header;
}
}
Run Code Online (Sandbox Code Playgroud)
问题:header元素未显示(标题为null).当标头设置为空字符串时,将显示以下内容:
<request>
<header></header>
</request>
Run Code Online (Sandbox Code Playgroud)
当我用作类型Object代替时String,结果更糟:
<request>
<header xsi:type="xs:string"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"></header>
</request>
Run Code Online (Sandbox Code Playgroud)
BTW:我正在使用此代码来创建XML字符串.
是否有可能得到一个空标签?
我创建一个没有参数的泛型方法,有些东西像:
private <T> TableCell<T> createTableCell(){
return new TableCell<T>();
}
Run Code Online (Sandbox Code Playgroud)
那么,在我的程序中,如何为具体类型调用此方法?
这是什么意思?
HashBiMap<Character, Integer> charOcc = HashBiMap.<Character, Integer> create();
Run Code Online (Sandbox Code Playgroud)