我正在努力理解这个概念。使用Path
的类方法创建Paths
类型。
我有两个疑问:
代码段:
Path dir = Paths.get(args[dirArg]);
我找到此代码段的类,没有Interface Path的实现。
课程中导入的包:
import java.nio.file.*;
import static java.nio.file.StandardWatchEventKinds.*;
import static java.nio.file.LinkOption.*;
import java.nio.file.attribute.*;
import java.io.*;
import java.util.*;
Interface
类型的方法。对于ex Paths
的类get方法。在Paths
类中,没有连接到Path
接口的链接。那么它如何在Java中定义?我怎么能理解这个?请对我说些什么......!
答案 0 :(得分:0)
您调用的get方法将创建(并返回)您的接口实现。
假设您有一个界面Action
:
public interface Action {
void doSomething();
}
你接到电话:
Action action = X.getAction();
使用以下X-class:
public class X {
public Action getAction() {
return new Action() {
public void doSomething() {
System.out.println("done");
};
}
}
因此,即使没有实现Action
的特定类,getAction()
方法也会返回一个实现接口的(匿名)类。
如果有一个实现你的接口的类,代码就没那么不同了:那时,getAction()
方法可能会返回该类的实例。
答案 1 :(得分:0)
我们如何在类中创建Path类型而不在类中创建任何Path接口(例如,实现)。
真正的答案是,你不需要关心。
get
方法返回某种实现Path
的对象,这是肯定的。而且你不需要知道更多关于什么样的路径的信息。您的所有代码都需要知道它返回Path
,故事结束。
从外面你可能看不到实现Path
的类,但实际上必须有一个。只是你不知道。
但是,可以获得返回的Path
的实际类型。
System.out.println(Paths.get("/Users/").getClass()); // getClass returns the type
这会打印class sun.nio.fs.UnixPath
,它似乎不是公共类。
在课堂上我们如何创建一个返回Interface类型的方法。对于ex paths的类get方法。在Paths类中,没有连接到Path接口的链接。那么它如何在Java中定义?我怎么能理解这个?
您当然可以创建一个具有接口返回类型的方法!
interface MyInterface { ... }
class A implements MyInterface { ... }
class B {
public static MyInterface myMethod() {
// obviously you can add more logic than this, this is just an example
return new A();
}
}
现在作为该方法的调用者,
MyInterface i = B.myMethod(); // you don't (need) know what actual type of object "i" is.