Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当类型为';它是静态导入的吗?_Java_Generics_Static Import - Fatal编程技术网

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);