在“ Thinking in Java”的第238页的“适应接口”一节中,作者介绍了以下示例
public class RandomDoubles {
private static Random rand = new Random(47);
public double next() { return rand.nextDouble();}
public static void main(string[] args){
RandomDouble rd = new RandomDoubles();
for (int i=0; i<7; i++)
System.out.print(rd.next()+" ");
}
}
与此示例相关联,作者指出
假设您有一个尚未实现Readable(interface)的类-如何使其与Scanner(class)一起使用?
因为您可以通过这种方式将接口添加到任何现有的类上,所以这意味着采用接口的方法为任何类提供了一种适用于该方法的方法。这是使用接口而不是类的强大功能。
但是,我不太理解该语句在示例中的体现。例如,接口添加在哪里? “采用接口的方法”中的方法指的是什么?
最佳答案
我要说的是,给定的文本与您提供的代码片段无关。
文本
文字描述了接口(特别是Readable)的用法(据我所知,RandomDoubles并非如此)。我对Scanner的工作方式并不十分熟悉,因为我最近一段时间没有使用Java。
但是,扫描程序可能会将Readable对象作为参数,然后从中读取该对象。这意味着在“扫描仪/读取”中的某处出现了如下代码。
Readable object = (parameter that is an object that implements Readable);
...
//in Scanner.read
object.read(buffer);
该Readable对象可以是实现Readable的任何类之一,可以是您自己的自定义类,也可以是FileReader,BufferedReader,InputStreamReader ...
由于这些类实现Readable并因此必须定义read(buffer),因此可以通过将它们称为该Interface类型的对象在Scanner类中互换使用。
文本特别提到可以通过使该函数实现Readable,然后定义其read(buffer)方法将字符输出到缓冲区的方式,将该功能添加到任何现有类中。
代码片段
附带的代码片段仅指定自定义类可以使用Random对象的方式,但仅向使用该类的任何程序公开其生成随机双精度值的能力。这与接口无关。
关于java - 适应界面,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6943120/