我想让这个方法对所有类类型都是通用的:
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 <?>
我发送的课程信息?
答案 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();