如何使这个方法对所有传递的类类型都通用?

时间:2016-05-05 13:24:08

标签: java generics arraylist reflection

我想让这个方法对所有类类型都是通用的:

public static void printListSample(List<Class<?>> dateExtend) {
    System.out.println("dateExtend size: "+dateExtend.size());
    if(dateExtend.size() > 0){
        for(Class<?> mp : dateExtend){
            System.out.print("\n print entry - ");
            if(mp.getDate() != null){
                String dateDb = new SimpleDateFormat("dd.MM.yyyy.").format(mp.getDate());
                System.out.print("value: "+dateDb);
            }
        }
    }
    System.out.println();
}

通知类&lt; ? &gt; - 现在就像这样,它开始工作;但我认为我走在正确的轨道上。

我想在参数中传递Class,然后使用foram循环播放它(因此我不必做if(SomeClass的实例)

怎么做?我需要示例代码,真的不知道怎么写这个。

修改 getDate是我作为param传递的自定义对象的方法。所以Java需要动态地弄清楚传递的对象是什么类类型。

我想编写用于打印任何传递类型的List(或ArrayList)的通用方法:

<MyClass> or <String> or <SomeOtherClass>, 

所以我不必担心类型和铸造会自动完成。

编辑(2):我想确定类型INSIDE方法(我认为我可以从中获取它:

<T> or <?> 

我发送的课程信息?

2 个答案:

答案 0 :(得分:4)

没有Class个实例有getDate()方法。

我怀疑你需要像List<? extends SomeClassWithAGetDateMethod>这样的参数:

public static void printListSample(List<? extends SomeClassWithAGetDateMethod> dateExtend) {
    System.out.println("dateExtend size: "+dateExtend.size());
    if(dateExtend.size() > 0){
        for(SomeClassWithAGetDateMethod mp : dateExtend){
            if (mp.getDate() != null) {
                ...
            }
        }
    }
}

顺便说一下,在迭代它之前你不需要检查List是否为空:只是迭代它,如果它没有元素,则循环中没有任何东西运行。

if (list.size() > 0) { for (ElementType e : list) { ... } }

相当于:

for (ElementType e : list) { ... }

(而且,!list.isEmpty()可以比检查大小是否大于零更有效(并且效率不低)。

答案 1 :(得分:0)

您是否尝试过使用

   public static <T> void printListSample(List<T> dateExtend){
       ...
       if...
          for(T mp : dateExtend){
              ...
          }
   }

你可能会遇到类型T未定义getDate()函数的问题。这有几个解决方案。 1)你可以施放mp(通常不被认为是一个好的meathod) 2)您可以将输入中的T扩展为仅具有getDate函数的类 3)你可以使用try catch

   //option 2
   public static <T extends MyClass> void printListSample(List<T> dateExtend){

   }

&#34; myClass的&#34;将需要是一个父类,这样无论你的列表中的T是什么类型,它都会使函数getDate();