抽象方法的实现

时间:2015-09-04 12:59:40

标签: hadoop hdfs

import java.net.URI;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;

public class ShowFileStatus {    
    public static void main(String[] args) throws Exception {
        // TODO Auto-generated method stub
        String uri = args[0];
        Configuration conf = new Configuration();
        FileSystem fs = FileSystem.get(URI.create(uri), conf);

        Path file = new Path(args[0]);
        FileStatus stat = fs.getFileStatus(file);
        System.out.println(stat.getLen());
    }
}

getFileStatus()FileSystem类中的抽象方法,FileSystem类需要扩展为使用getFileStatus()方法。 但是在上面的代码中,我可以使用方法而不扩展FileSystem类。 怎么样 ?我无法理解这一点?

1 个答案:

答案 0 :(得分:0)

使用FileSystem类中提供的静态工厂方法获取FileSystem类的实例时。它在内部创建自己的一个实现的实例。 FileSystem有许多可用的实现。

public static FileSystem get(URI uri, Configuration conf) throws IOException
  

返回此URI的方案和权限的FileSystem。 URI的方案确定配置属性名称fs.scheme.class,其值为FileSystem类。整个URI传递给FileSystem实例的initialize方法。

现在基本上,您将调用所提供实现的getFileStatus方法。