Java泛型问题,请大侠出手

Java3c 2007-12-21 12:38:01

import static java.lang.System.*;
import java.util.*;

public class IOoverControlPanel{
public static void main(String[] args){
Scanner s = new Scanner(in);
ArrayList<Integer> a_int = new ArrayList<Integer>();
try{
while(s.hasNextInt())
a_int.add(s.nextInt());

//printArrayList(a_int,"a_int");
//printArrayList(a_int);
}
catch(IllegalStateException e){
e.printStackTrace();
}
catch(IndexOutOfBoundsException e){
e.printStackTrace();
}
finally{
/*for(int i = 0,j = a_int.size(); i < j; ++i)
out.printf("a[%d] = %d, size():%d\n",i,a_int.get(i),j);*/
out.println(a_int);
}
}

public double f(float f){return 1.0;}

public static <T extends ArrayList<? extends Integer>> void printArraylist(T a,String name){
for(int i = 0,j = a.size(); i < j; ++i)
out.printf("%s[%d] = %d\n",name,i,a.get(i));
}

public static <T extends ArrayList<? extends Integer>> void printArraylist(T a){
//public static void printArraylist(ArrayList<? extends Integer> a){
int j = a.size();
if( j > 0 ) out.print("[");
else return;

for(int i = 0; i < j; ++i)
out.printf("%d",a.get(i));
out.print("]");
}
}


编译不过,有如下错误:

...\project\IOoverControlPanel>javac -Xlint:unchecked IOoverControlPanel.java
IOoverControlPanel.java:13: 找不到符号
符号: 方法 printArrayList(java.util.ArrayList<java.lang.Integer>)
位置: 类 IOoverControlPanel
printArrayList(a_int);
^
1 错误

问题应该是在被调函数的参数声明上,请问应该如何定义?

...全文
103 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Java3c 2007-12-21
  • 打赏
  • 举报
回复
补充两点:

1、第13行 未注掉时出错 //printArrayList(a_int);

2、JDK1.5.0_14无法对这个类进行加载,有如下错误:
I:\LG_course\java_temp\project\ReflectTest>java ReflectTest IOoverControlPanel
Exception in thread "main" java.lang.UnsupportedClassVersionError: Bad version n
umber in .class file
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:620)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:12
4)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
at java.net.URLClassLoader.access$100(URLClassLoader.java:56)
at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:268)
at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)

jdk1.6.0_03 可以加载,但函数原形与期望不符:I:\LG_course\java_temp\project\ReflectTest>set classpath=I:\LG_course\java_temp\
project\IOoverControlPanel;%classpath%

I:\LG_course\java_temp\project\ReflectTest>java ReflectTest IOoverControlPanel
IOoverControlPanel
IOoverControlPanel
public static void IOoverControlPanel.printArraylist(java.util.ArrayList,java.la
ng.String)
public static void IOoverControlPanel.printArraylist(java.util.ArrayList)
public static void IOoverControlPanel.main(java.lang.String[])
public double IOoverControlPanel.f(float)
public native int java.lang.Object.hashCode()
public final native java.lang.Class java.lang.Object.getClass()
public final void java.lang.Object.wait(long,int) throws java.lang.InterruptedEx
ception
public final void java.lang.Object.wait() throws java.lang.InterruptedException
public final native void java.lang.Object.wait(long) throws java.lang.Interrupte
dException
public boolean java.lang.Object.equals(java.lang.Object)
public java.lang.String java.lang.Object.toString()
public final native void java.lang.Object.notify()
public final native void java.lang.Object.notifyAll()
public IOoverControlPanel()


附反射代码:
import static java.lang.System.*;
import java.lang.reflect.*;

public class ReflectTest{
public static void main(String[] args){
try{
out.println(args[0]);
Class c = Class.forName(args[0]);//.newInstance();

out.println(c.getName());
printMethods(c,1);
}
catch(ClassNotFoundException e){
e.printStackTrace();
}
finally{}
}

static void printMethods(Class c ,int i){
try{
Method[] m;
m = c.getMethods();
Constructor[] ctors = c.getConstructors();

for(Method m1:m){
out.println(m1.toString());
}

for(Constructor c1 : ctors){
out.println(c1.toString());
}
}
catch(SecurityException e){
e.printStackTrace();
}
finally{}
}

}
「已注销」 2007-12-21
  • 打赏
  • 举报
回复
同意2楼的,方法名是printArraylist
^小写

而调用的地方是 printArrayList
^大写
Java3c 2007-12-21
  • 打赏
  • 举报
回复
帖子发得太急了,忘了取消关键的调用点的注释,这个程序再编一下试试

try{
while(s.hasNextInt())
a_int.add(s.nextInt());//就是这里

printArrayList(a_int);
}


编这个试试:

import static java.lang.System.*;
import java.util.*;

public class IOoverControlPanel{
public static void main(String[] args){
Scanner s = new Scanner(in);
ArrayList<Integer> a_int = new ArrayList<Integer>();
try{
while(s.hasNextInt())
a_int.add(s.nextInt());

printArrayList(a_int);
}
catch(IllegalStateException e){
e.printStackTrace();
}
catch(IndexOutOfBoundsException e){
e.printStackTrace();
}
finally{
/*for(int i = 0,j = a_int.size(); i < j; ++i)
out.printf("a[%d] = %d, size():%d\n",i,a_int.get(i),j);*/
out.println(a_int);
}
}

public double f(float f){return 1.0;}

public static <T extends ArrayList<? extends Integer>> void printArraylist(T a,String name){
for(int i = 0,j = a.size(); i < j; ++i)
out.printf("%s[%d] = %d\n",name,i,a.get(i));
}

public static <T extends ArrayList<? extends Integer>> void printArraylist(T a){
//public static void printArraylist(ArrayList<? extends Integer> a){
int j = a.size();
if( j > 0 ) out.print("[");
else return;

for(int i = 0; i < j; ++i)
out.printf("%d",a.get(i));
out.print("]");
}
}
netfly_128 2007-12-21
  • 打赏
  • 举报
回复
public static <T extends ArrayList<? extends Integer>> void printArraylist(T a,String name)
似乎的方法名似乎应该是printArrayList,这个程序我在jdk1.5.0.9上跑也没问题。

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧