我有一个用Java编写的小应用程序,经过测试并在JRE_1.6上运行.现在我需要针对JRE_1.5运行它.我改变了我必须符合Java 1.5要求的源代码,并且项目编译得很好.
问题是它使用了许多预编译的库opencsv-2.3,这些库是用Java 1.6编译的,因此调用它们的任何类会产生一个java.lang.UnsupportedClassVersionError.
他们中的大多数是com.apachelibs + opencsv-2.3+org.jdom
如何确定哪些库确实需要替换?如何替换需要它的库?
UPD:在我怎能取代部分实际上代表"有什么可以,如果没有旧的图书馆做什么?" 有没有办法降级已编译的库,或者我是否需要在1.5上找到类似的解决方案并重写代码?
这是一个例子:
package com.demo;
public class PassArray {
static void vaTest(int... v){
System.out.println("no of args : "+v.length+"contents: ");
for (int x:v){
System.out.println(x+" ");
}
}
static void vaTest(boolean... v){
System.out.println("no of args : "+v.length+"contents: ");
for (boolean x:v){
System.out.println(x+" ");
}
}
public static void main(String args[]){
vaTest(1,2,3);
vaTest(true,false,true);
vaTest();//Error:Ambiguous!
}
}
Run Code Online (Sandbox Code Playgroud)
谁能告诉我:
我有一些问题
1.为什么会出现模棱两可的错误?
2.i有一个Varargs参数就好
int doIt(int a,int b,int c,int... vals)
Run Code Online (Sandbox Code Playgroud)
为什么必须最后声明varargs?
我不是Java专家,只是体验Java 5和Java 7上以下程序输出的变化.任何人都知道Java 7中HashMap实现的变化是什么吗?
import java.util.HashMap;
import java.util.Map;
public class HashMapDemo {
public static void main(String[] args) {
Map<String, String> map = new HashMap<String, String>();
map.put("1", "111");
map.put("a", "aaa");
map.put("A", "AAA");
map.put("D", "DDD");
map.put("d", "ddd");
map.put("0", "000");
map.put("B", "BBB");
map.put("b", "bbb");
map.put("2", "222");
for(Map.Entry<String, String> entry : map.entrySet()){
System.out.println(entry.getKey()+ " "+entry.getValue());
}
}
}
Run Code Online (Sandbox Code Playgroud)
Java 7上的输出
D DDD
2 222
d ddd
1 111
0 000
b bbb
A AAA
B BBB
a aaa
Run Code Online (Sandbox Code Playgroud)
Java 5上的输出
0 000
1 111 …Run Code Online (Sandbox Code Playgroud) 我正在使用JPA 2并具有以下方法:
private static void wipeTable(EntityManager em, Class<? extends Table> klass) {
String tableName = klass.getAnnotation(Table.class).name();
...
}
Run Code Online (Sandbox Code Playgroud)
我认为Class<? extends Table>参数存在问题.我有一个像这样的实体类:
@Entity
@Table(name = "collections")
public class Collection extends MyOtherClass implements Serializable { ... }
Run Code Online (Sandbox Code Playgroud)
我可以做得Collection.class.getAnnotation(Table.class).name()很好,所以我希望能够Collection作为参数传递.只是调用wipeTable(em, Collection.class);有以下错误:
FetchData类型中的方法wipeTable(EntityManager,Class <?extends Table>)不适用于参数(EntityManager,Class <Collection>)
我试过让参数为be Class klass,没有泛型:
private static void wipeTable(EntityManager em, Class klass) {
String tableName = ((Table)klass.getAnnotation(Table.class)).name();
Run Code Online (Sandbox Code Playgroud)
这导致我的IDE建议:
类是原始类型.应参数化对泛型类的引用
我正在使用Java 1.5.有没有办法说"给我一个Class注释类型的参数@Table"?
我们在 Windows 上使用 JBoss_4_0_4_GA 和 JDK 1.5.0(无更新)
JBoss 服务器在 Wrapper(版本 3.2.3) http://wrapper.tanukisoftware.org内运行。
由于 JVM 太旧了,我什至无法在 JVM 上使用 -XX:+HeapDumpOnOutOfMemoryError 选项。
我可以选择什么来找出问题?
与往常一样,内存不足异常发生在应用程序的不同部分。
我没有立即升级 JVM 的自由。
The current VM settings
Java Additional Parameters
wrapper.java.additional.1=-Xms512m
wrapper.java.additional.2=-Xmx1024m
wrapper.java.additional.3=-Dsun.rmi.dgc.client.gcInterval=3600000
wrapper.java.additional.4=-Dsun.rmi.dgc.server.gcInterval=3600000
wrapper.java.additional.5=-Dorg.xml.sax.driver=org.apache.xerces.parsers.SAXParser
wrapper.java.additional.6=-Djava.endorsed.dirs=D:/jboss-4.0.4.GA/lib/endorsed
Run Code Online (Sandbox Code Playgroud)
异常的片段
信息| JVM 1 | 2012/05/31 11:25:03 | 11:25:03,502 错误 [SOAPFaultExceptionHelper] SOAP 请求异常信息 | JVM 1 | 2012/05/31 11:25:03 | java.rmi.RemoteException:java.lang.OutOfMemoryError:Java堆空间;嵌套异常是:INFO | JVM 1 | 2012/05/31 11:25:03 | java.util.concurrent.ExecutionException:java.lang.OutOfMemoryError:Java堆空间
信息| JVM 1 | 2012/05/31 11:25:03 | 引起原因:java.util.concurrent.ExecutionException:java.lang.OutOfMemoryError:Java堆空间INFO | JVM 1 | 2012/05/31 …
Wrt ReadWriteLock,为什么我在尝试阅读某些东西时需要锁?仅在我正在更改变量时才使用我的知识,而不是读它以避免并发线程试图更改该变量。那么为什么我们只需要一个锁就可以阅读呢?
有没有什么办法可以在JDK 6上运行用Java 5编译的类文件(即使用main作为入口点)?
我使用Java5,我不想在Classpath中指出每个.jar文件,所以我试着编写小的shell脚本:
find $LIB_DIR -name '*.jar' -print > /tmp/classpath
CP=
cat /tmp/classpath | while read line
do
CP=$CP:$line
done
rm -f /tmp/classpath
Run Code Online (Sandbox Code Playgroud)
但这不起作用 - $ CP变量是空的.
因此,$ CP应该是单个字符串,其中包含由':'分隔的路径
有谁知道这里有什么问题,以及如何正确地将所有文件的行连接到一个字符串?
我在使用泛型定义Java5方法时遇到了一些问题.
我试验过我可以定义一个方法如下:
public <R extends Runnable & MyInterface, T> void submit(R runnable, T task);
Run Code Online (Sandbox Code Playgroud)
因此,submit只接受R实现接口Runnable和类的对象的实例MyInterface.现在,假设我想做以下事情:
public <C extends Callable & MyInterface, T> submit(C<T> callable);
Run Code Online (Sandbox Code Playgroud)
其中C是一个Callable也实现MyInterface并具有类型返回值的T.在这种情况下,IDE会在方法公司中报告错误:
required: class
found: type parameter C
where C,T are type-variables
Run Code Online (Sandbox Code Playgroud)
定义第二种submit方法的正确方法是什么?
PS:我不知道标题是否是最好的.一旦确定问题类型,请随时改进标题!
Java 1.5是与泛型一起发布的,他们希望它与早期版本向后兼容,因此Java禁止在创建原始实例时使用方法特定的泛型。
例如
class A<T> {
<U> U myMethod(U u) {
return u;
}
}
Run Code Online (Sandbox Code Playgroud)
如果我做 ,
A a = new A();
Run Code Online (Sandbox Code Playgroud)
a.myMethod将要求我将Object作为输入传递,其返回类型为Object。显然,类类型参数'T'与myMethod()特定的泛型'U'不冲突。但是Java却以某种方式表示,为了处理向后兼容性,它们会删除原始实例使用的所有泛型。
别人多次问了上述问题,所有答案都只说了一次,因为与早期版本的向后兼容性Java不允许这样做。[点]。
但是,没有一个答案提供了一个实例,以防Java允许对原始实例使用方法特定的泛型,而在早期版本中可能会失败。
任何人都可以通过提供一个特定的实例(如果他们允许的话)在1.5之前的早期版本中出现问题的情况来提供帮助吗?
请不要提供其他与问题无关的,没有答案的stackoverflow问题。
我有一个在java 5.0下开发的模块
package mypack;
class MessageParser {
public MessageParser(String s) {
......
}
}
Run Code Online (Sandbox Code Playgroud)
我有另一个在java 6.0下开发的模块
import mypack;
......
String str = someString;
MessageParser parser = new MessageParser(str);
......
Run Code Online (Sandbox Code Playgroud)
但我收到错误"找不到符号构造函数MessageParser(java.lang.String)"
BTW:我使用的IDE是intellij的想法
谁能告诉我为什么以及如何让它发挥作用?
我正在计划学习Java,我有使用其他面向对象语言编程的经验,因此我熟悉OOP概念.目前我正在考虑两本书,以帮助我在Java开发中获得快速启动."首先进入Java第二版"或"Java All-in-One For Dummies第3版".
现在很多人都建议首先将Java作为两本书的优先考虑.然而,首先进入Java的是2005年发布的(除非他们是一个我不知道的更新版本)并且在Java 5中教授.Java All-in-One于去年8月发布并针对Java 7进行了更新.
现在我的问题是我倾向于首先使用Java(使用Java5),我是否会错过Java 6和7的重要方面?我是否能够熟练掌握Java开发人员?
我在网上读到的东西错误地说int []Java中的标准等数组作为副本传递,而不是传递对数组的引用,类似于基本的数字类型,当我以为我在修改副本时最终覆盖了数组.我是否可以将其作为一种设计选择,以便在大约90年代中期为Java目标受众提供更简单的东西?(使对象在语法上看起来与C数组相同,或者Java中的数组实际上不是"Object"类型?)
也就是说,他们为什么不这样做:
Array array = new Array(<size>);
Run Code Online (Sandbox Code Playgroud)
另外,为什么他们不让所有内容(文字除外)通过引用来确保一致性?(int然后将s作为引用传递给int,而不是作为其值int,因此修改一个变量,该变量是该方法中方法的参数将修改原始变量的值,等等)