为什么将类传递给Java中的方法很有用?

时间:2013-04-11 10:52:55

标签: java

这在我的课程中没有涉及,我很难想出为什么我会想要这个。我遇到过以下代码:

OpenNetworking proxy = service.getPort(OpenNetworking.class);

在上面的行中,我可以看到它正在返回端口,并且它正在将类传递给方法,但我读到了这个,因为OpenNetworking.class尚未实例化。我显然错过了一些东西。

6 个答案:

答案 0 :(得分:3)

这是Factory method模式的一个例子。

向服务提供类类型,以便在指定类型Port上提供OpenNetworking

在这种情况下,类类型很方便,因为它是在创建对象时为对象提供唯一标识符的最简单方法。如果对象的状态发生变化,而class包含对象的类型,则不需要维护它。

答案 1 :(得分:2)

可以有很多理由这样做:

  
      
  1. 控制类的实例数:假设您要控制一个类所需的实例数,可以构造构造函数   私有或包级别,并在有人调用时返回相同的实例   你的方法
  2.   
  3. 安全性:您可能希望您的课程安全,并且通常不希望任何人允许您实例化您的课程。
  4.   
  5. 依赖关系:您的类可能具有依赖关系,只能在运行时找出,然后服务类使用反射   适当地实例化。
  6.   

答案 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(代理,合成类实例)