Java `尝试访问子类的属性时找不到符号“”,但变量的类型为超类
Java noob在这里,我有一个类型为OutputStream的变量,稍后在函数中,我有一个条件,将OutputStream分配给FileOutputStream或ByteArrayOutputStream的新实例,但是每当我尝试访问属于任何子类的任何属性时。我收到一个Java `尝试访问子类的属性时找不到符号“”,但变量的类型为超类,java,android,polymorphism,Java,Android,Polymorphism,Java noob在这里,我有一个类型为OutputStream的变量,稍后在函数中,我有一个条件,将OutputStream分配给FileOutputStream或ByteArrayOutputStream的新实例,但是每当我尝试访问属于任何子类的任何属性时。我收到一个错误,找不到符号。 有没有办法保持同一父类的变量,并尝试告诉运行时,每当我需要访问该属性时,它将是子类类型的 下面是一些伪代码 public void work(Map params) { OutputStream output
错误,找不到符号
。
有没有办法保持同一父类的变量,并尝试告诉运行时,每当我需要访问该属性时,它将是子类类型的
下面是一些伪代码
public void work(Map params)
{
OutputStream output = null;
if(params.isAFile)
{
output = new FileOutputStream();
}
else
{
output = new ByteArrayOutputStream();
}
...do some work that makes use of the OutputStreams class
if(isFile)
{
return output
}
else
{
mybuffer = output.buf; //it fails here with Cannot find symbol since output is of type OutputStream when it should be treated as type ByteArrayOutputStream
return myBuffer;
}
}
你必须这样施展:
(ByteArrayOutputStream output).buf
Java不知道它可以安全地调用ByteArrayOutputStream中的方法,因为OutputStream没有该方法 你必须这样施展:
(ByteArrayOutputStream output).buf
Java不知道它可以安全地调用ByteArrayOutputStream中的方法,因为OutputStream没有该方法 那只是我写的伪代码,可以给你一点上下文,请不要太详细。那只是我写的伪代码,可以给你一点上下文,请不要在这方面花费太多的细节。太棒了,谢谢你,我知道有些地方需要一些类型转换,所以这看起来是正确的,我只是对Java不太熟悉。编译器将其视为lambda表达式,并告诉我使用更高版本进行编译。太棒了,谢谢你,我知道某个地方需要一些类型转换,所以这看起来是正确的,我只是对Java不太熟悉。编译器将其视为lambda表达式,并告诉我使用更高版本进行编译。