InputStream in = this.getClass().getClassLoader().getResourceAsStream();
这个式子合法吗?右边看了下是返回类型是InputStream,但是InputStream是抽象类啊,这样赋值给in可以吗?求大神解答~
------解决思路----------------------
对象实例可以赋值给它的真实类型的任意一个父类型或父接口。
所以你只要知道它 具备 InputStream 的功能就可以了,这是面向对象的程序设计,关注功能,忽略不必要的细节。
如果你确实想知道这个 InputStream 是不是 FileInputStream 可以:
if (input instanceof FileInputStream) {
FileInputStream fis = (FileInputStream) input;
}
或者 boolean isFile = FileInputStream.class.isAssignFrom(input);
或者
String className = input.getClass().getName();
boolean isFile = className.equals("java.io.FileInputStream");
------解决思路----------------------
关于抽象类实例化这个问题,以前在Java吧看到过,都是被误导了,你要记住一点,抽象类是绝对不能被实例化的! 你上面的那个例子实际是调用FileInputSteram实例化然后返回InputStream。