参数化方法中的变量范围 - java泛型

时间:2014-12-25 12:39:13

标签: java generics collections foreach scope

为什么在这个foreach循环中,elem不被识别为Path,它是什么,我只能在它上面调用Object方法?

public class TypeOption<Path> implements Option<Path> {

    @Override
    public void apply(String arg, Collection<Path> c) {
        for (Path elem : c) {
            if (Files.isExecutable(elem)) c.remove(elem);
        }
    }
}

这一行

if (Files.isExecutable(elem)) c.remove(elem);

引起了麻烦,它说

The method isExecutable(java.nio.file.Path) in the type Files is not applicable for the arguments (Path)

1 个答案:

答案 0 :(得分:3)

因为Path是一个类型参数 - 你已经声明了一个泛型类型,Path作为类型参数。我怀疑你*想要:

public class TypeOption implements Option<Path> {

此时,Path引用名为Path的现有类型,并用于参数Option<T>的类型}(或Option)的任何类型参数。