我从一位 friend 那里得到了这段代码。
import java.io.*;
import javax.sound.sampled.*;
public class xx
{
public static void main(String args[])
{
try
{
File f=new File("mm.wav");
AudioInputStream a=AudioSystem.getAudioInputStream(f);
AudioFormat au=a.getFormat();
DataLine.Info di=new DataLine.Info(Clip.class,au);
Clip c=(Clip)AudioSystem.getLine(di);
c.open(a);
c.start();
}
catch(Exception e)
{
System.out.println("Exception caught ");
}
}
}
但是我不明白这行的意思是Cilp c =(Clip)AudioSystem.getLine(di);
(剪辑)代表什么?
我的第二个问题是DataLine是什么接口(interface),该语句DataLine.Info ....的含义是什么?
最佳答案
DataLine是一个包含嵌套类“Info”的接口(interface)。这里的声明:
DataLine.Info di = ...
创建一个新的Info类实例,该实例在DataLine类中定义。
语句(剪辑)就是我们所说的 Actor 表。它用于将一个对象从一种类型转换为另一种。
方法AudioSystem.getLine(di)返回Line类型的对象。因此,基本上,您的 friend 将返回的对象转换为Clip,用于实例化对象c。
这是允许的,不会产生错误,因为c是Clip类型,它扩展了DataLine,而DataLine本身扩展了Line。
希望这可以帮助 !