这在我的课程中没有涉及,我很难想出为什么我会想要这个。我遇到过以下代码:
OpenNetworking proxy = service.getPort(OpenNetworking.class);
在上面的行中,我可以看到它正在返回端口,并且它正在将类传递给方法,但我读到了这个,因为OpenNetworking.class
尚未实例化。我显然错过了一些东西。
答案 0 :(得分:3)
这是Factory method模式的一个例子。
向服务提供类类型,以便在指定类型Port
上提供OpenNetworking
。
在这种情况下,类类型很方便,因为它是在创建对象时为对象提供唯一标识符的最简单方法。如果对象的状态发生变化,而class
包含对象的类型,则不需要维护它。
答案 1 :(得分:2)
可以有很多理由这样做:
- 控制类的实例数:假设您要控制一个类所需的实例数,可以构造构造函数 私有或包级别,并在有人调用时返回相同的实例 你的方法
- 安全性:您可能希望您的课程安全,并且通常不希望任何人允许您实例化您的课程。
- 依赖关系:您的类可能具有依赖关系,只能在运行时找出,然后服务类使用反射 适当地实例化。
醇>
答案 2 :(得分:1)
这里我们传递类类型(Java中的类)。因此,方法getPort中的处理是基于类的类型完成的,我们不需要Object实例来处理它。 当然,它与此代码(不编译)有所不同:
OpenNetworking proxy = service.getPort(new OpenNetworking());
答案 3 :(得分:0)
显然,方法service.getPort();
的行为符合参数中的类型,假设有一个openNetworking端口,另一个用于closeNetworking,因此提供类名作为参数就足以获得所需的端口数字,可以为此创建一个枚举,但随后扩展现有代码将迫使您为每种类型扩展枚举。
答案 4 :(得分:0)
另外由于泛型的限制,当你有一个泛型类/方法并且你需要创建一个新实例时,你需要一个类。例如:
class SomeClass<T> {
public static<T> T create() {
return new T(); // will not work
}
public static<T> T create(Class<T> clazz) {
return clazz.newInstance(); //will work
}
}
因此您需要类实例来创建该类型的新对象。
答案 5 :(得分:0)
使用过的方法有这个定义:
public <T> T getPort(Class<T> serviceEndpointInterface)
因此它返回一个对象的实例,该对象扩展了类T(代理,合成类实例)