Java 当类型为';它是静态导入的吗?
我发现您可以使用特殊类型调用泛型方法,例如: 假设我们有一个通用方法:Java 当类型为';它是静态导入的吗?,java,generics,static-import,Java,Generics,Static Import,我发现您可以使用特殊类型调用泛型方法,例如: 假设我们有一个通用方法: class ListUtils { public static <T> List<T> createList() { return new ArrayList<T>(); } } classlistutils{ 公共静态列表createList(){ 返回新的ArrayList(); } } 我们可以这样称呼它: List<Integer>
class ListUtils {
public static <T> List<T> createList() {
return new ArrayList<T>();
}
}
classlistutils{
公共静态列表createList(){
返回新的ArrayList();
}
}
我们可以这样称呼它:
List<Integer> intList = ListUtils.<Integer>createList();
List intList=ListUtils.createList();
但是当它是静态导入的时候,我们怎么能称之为?e、 g:
List<Integer> intList = <Integer>createList();
List intList=createList();
这不起作用。你不能。您必须使用类名引用它 似乎有:
void foo(List<String> a) {}
最后,has
list.newArrayList()
,因此您最好重用它。以下内容对我很有用:
package test;
import java.util.List;
import static test.ListUtils.createList;
public class ListConsumer {
public static void main(String[] args) {
List<Integer> list = createList();
List<String> list2 = createList();
}
}
封装测试;
导入java.util.List;
导入static test.ListUtils.createList;
公共类列表消费者{
公共静态void main(字符串[]args){
List=createList();
List list2=createList();
}
}
我相信Mindas已经证明了这应该适用于推理,您的语法有点不正确。不过,我建议你看看谷歌番石榴,他们有这个确切的方法和其他一些有用的方法。重新发明轮子毫无意义:)你不能。这是Java语言语法中的一个设计缺陷。Scala是JVM上较新的静态类型语言,它解决了这个问题。(这就是在Scala中调用的方式:val intList:List[Int]=creatList[Int]()
)。据我所知,静态导入机制的一个缺点是,如果希望提供形式参数,必须指定调用对象/类。
Mindas是正确的,当没有参数时,类型推断机制将使用函数返回值所指定的类型。但是,当您提供参数时,技巧就来了。如果希望避免必须指定调用对象/类,则可以通过如下参数类型转换键入提示:
public static <E> E foo(E e) {}
Number n = foo((Number)3);
publicstaticefoo(eee){
编号n=foo((编号)3);
有了类型提示,类型推断将返回一个Number类型的对象,而不是Integer类型的对象,否则它将进行推理。类型推断对您的具体示例不起作用吗?可能重复的可能重复的感谢!我甚至没有考虑过这种情况(在参数站点调用)。我只知道番石榴,太棒了!谢谢你的澄清:)我当时不太懂类型推断。
public static <E> E foo(E e) {}
Number n = foo((Number)3);