2017-04-06 70 views
2

在Java我想作为跟着3种重载方法结合成一个一般方法: 方法1:如何在一种方法中解析不同类型的参数的

public void method1(String name, String Para){......} 

//学生是一个对象 方法2:

public void method2(String name, Student para){....} 

方法3:

public boolean method3(String name, List <Student> para){...} 

怎么可能我将以上3种方法合并为一种,组合后应如下所示:

public boolean generalMethod(String name, ?????? para){....} 

我应该在Java中使用泛型参数吗?

在此先感谢

+0

这也就没有什么意义使一个“通用”方法,然后投下“对象”的所有内容。首选的解决方案是使方法具有相同的名称,但签名不同(参数重载)。或者创建一个带有子字幕的类,每个子类实现一种类型的参数,例如'StudentParameter',用一种方法计算布尔值并使用策略模式(这是一个巨大的开销:)) – DVarga

回答

2

使用java generics

public class MyService { 
    public static void main(String[] args) { 
     MyService myService = new MyService(); 

     myService.method("name", "hello"); 
     myService.method("name", new Student()); 
     myService.<List<Student>>method("name", Lists.newArrayList(new Student())); 
    } 

    public <T> void method(String name, T para) { 
     System.out.println(para); 
    } 
} 
1

这绝对是一个丑陋的解决方案给你买可以按照

public boolean generalMethod(String name, Object para){....} 

和方法,你可以使用instanceof运营商检查para类型

更新

由于没有直接关系在这些参数中,你不能直接使用泛型(实际上你可以在泛型中使用Object类型,但是不会增加太多的值)。如果有一个共同的父类,那么你可以使用它。

你可以做类似的事情,在this post

+0

谢谢,我可以使用泛型参数吗?例如,是通用参数接受列表类型,对象类型和字符串类型?谢谢 – fzhurd

+0

检查更新的答案 – stinepike

0

建议由于所有的类扩展Object类,所以你可以使用

public boolean generalMethod(String name, Object para){....} 
相关问题