我一直在研究创建条形码扫描仪程序,在研究中发现了从未见过的东西,我不确定它到底在做什么...
这是我的程序的一小段,包括我不明白的那一行:
import javax.comm.*;
public class InvScan implements SerialPortEventListener {
static CommPortIdentifier portId1;
SerialPort serialPort1;
public InvScan(){
serialPort1 = (SerialPort) portId1.open("InvScan", 2000); //what does this mean?
}
请参阅我评论“这是什么意思?”的行。SerialPort是一个抽象类……我知道抽象类可以使用匿名类进行实例化,但是我以前从未见过。这行代码来自某个程序的教程,该程序旨在执行与我想做的事情相关的操作,但是作者并没有很好地解释这里发生的事情(或者也许我只是不明白?)。他的笔记说:
我们通过执行portId1的open()方法来实例化SerialPort对象。回忆portId1是一个ComPortIdentifier对象,而open()方法来自ComPortIdentifier。
我已经进行了一些研究,但我什至找不到任何正在发生的事情的例子(可能是因为我什至不知道该怎么称呼)。
这甚至对我的程序来说并不是真正必要的,因为我可以重新设计它(而不是成为脚本小子,哈哈),但这确实使我感到困惑,因为我不知道该行发生了什么。
实际对象是从派生的非抽象子类的实例SerialPort
。所有这一切都保证了抽象方法已在该实例化对象中完全定义。在内部,这看起来像:
public class CommPortIdentifier ... {
...
public CommPort open(java.lang.String appname, int timeout)
throws PortInUseException {
CommPort val = new NonAbstractCommPort( ... );
// Do something here
return val;
}
...
}
作为的抽象子类CommPort
,SerialPort
除非有保证对象的实际返回类型是的子类,否则强制转换为有点冒险SerialPort
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句