我从一位 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。

希望这可以帮助 !

09-10 07:47