加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 什么时候方法应该接受类类型作为参数?

发布时间:2020-12-15 02:27:40 所属栏目:Java 来源:网络整理
导读:我已经看到了API的设计,它们有时会接受作为参数传递的类类型. 对于例如[a]: class AClass {//details}class Someclass { public void someMethod(class klass,int num ) { // some code }}class client {public static void main(String[] args) { Someclas
我已经看到了API的设计,它们有时会接受作为参数传递的类类型.
对于例如[a]:

class AClass {
//details
}

class Someclass {

 public void someMethod(class klass,int num ) {
 // some code
 }

}

class client {

public static void main(String[] args) {
   Someclass obj = new Someclass();
   obj.someMethod(AClass.class,10); // some sample use cases of client
}

}

现在在java中,如果可以从对象获取类类型,则根本不需要传递类,如下所述[b]

class AClass {
//details
}

class Someclass {

 public void someMethod(AClass obj,int num ) {
 // some code
 }

}

class client {

public static void main(String[] args) {
   Someclass obj = new Someclass();
   AClass aclassObj = new Aclass();
   obj.someMethod(aclassObj,10); 
}

}

我也可以改变someMethod()的参数并使用下面给出的[c]

public void someMethod(Object obj,int num ) {

 if(obj instanceof AClass) {
  //do something 
 }

}

那么我们何时应该选择[a]中所示的设计而不是[b]?是否有任何一般原则要考虑[a]中所示的设计.

PS:某些API的设计如下所示

Quartz example

解决方法

一些明显的答案是:

>任何时候该方法实际上并不将对象作为参数(例如,当您从DI框架或工厂请求类型的实例时,例如在您提供的Quartz示例中).
>每次传入的参数可能为null,因此您无法在其上调用getType,而instanceof也不会指示该对象是任何类型的实例.

因此,当有问题的方法需要生成有问题的类的实例或者提供关于该类的一些元数据时,采用类参数是有意义的,这些元数据不需要创建实例.

我要指出的唯一另一个考虑因素是,在接受类参数时可以使用泛型,如Guice的Injector接口中的以下方法签名:

<T> T getInstance(Class<T> type);

注意这是如何允许方法声明它返回一个你作为类参数传入的相同类型的对象,因此你不需要在之后强制转换对象.您还可以使用通用通配符(Class<?extends Foo>)来限制可以传递给方法的类的类型.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读