나는 다음 클래스, 나는 인 IntelliJ 또는 받는다는 명령 줄에서 다음과 같은 컴파일러 경고를 (주 방법은 하나의 클래스에 문제를 재현하기 위해 추가되었습니다 가능 here) 컴파일 할 때 :안전하지 않은 동작, 선택하지 않은 변환
를 세부 사항을 볼 수 받는다는을 선택 해제하고 나는이있어 :java: /Users/luigi/var/src/owner/src/test/java/org/aeonbits/owner/multithread/ThreadBase.java uses unchecked or unsafe operations.
java: Recompile with -Xlint:unchecked for details.
그런 다음 나는 -Xlint 추가
[WARNING] /Users/luigi/var/src/owner/src/test/java/org/aeonbits/owner/multithread/ThreadBase.java:[74,45] unchecked conversion
required: java.util.List<java.lang.Throwable>
found: java.util.List
클래스 소스는 다음과 (주 하나의 클래스에 문제를 재현하기 위해 추가되었습니다) :
package org.aeonbits.owner.multithread;
import org.aeonbits.owner.Config;
import org.aeonbits.owner.UtilTest.MyCloneable;
import java.util.ArrayList;
import java.util.List;
import static org.aeonbits.owner.UtilTest.debug;
abstract class ThreadBase<T extends Config> extends Thread implements MyCloneable {
private static long counter = 0;
final long uniqueThreadId = ++counter;
final T cfg;
final Object lock;
final int loops;
final List<Throwable> errors = new ArrayList<Throwable>();
ThreadBase(T cfg, Object lock, int loops) {
this.cfg = cfg;
this.lock = lock;
this.loops = loops;
}
@Override
public Object clone() throws CloneNotSupportedException {
return super.clone();
}
@Override
public void run() {
synchronized (lock) {
try {
lock.wait();
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
return;
}
}
for (int i = 0; i < loops; i++) {
debug("%s[%d] started loop #%d.\n", getClass().getName(), uniqueThreadId, i);
try {
execute();
} catch (Throwable throwable) {
debug("%s[%d] thrown an error in loop #%d.\n", getClass().getName(), uniqueThreadId, i);
errors.add(throwable);
}
yield();
debug("%s[%d] completed loop #%d.\n", getClass().getName(), uniqueThreadId, i);
}
}
abstract void execute() throws Throwable;
public List<Throwable> getErrors() {
return errors;
}
public static void main(String[] args) {
ThreadBase t = new ThreadBase(null, new Object(), 10) {
@Override
void execute() throws Throwable {
}
};
List<Throwable> errors = t.getErrors();
// ^compiler reports the warning here!
}
}
추가 세부 정보 : pom.xml 파일에서
$ mvn --version
Apache Maven 3.0.4 (r1232337; 2012-01-17 09:44:56+0100)
Maven home: /Users/luigi/opt/apache-maven-3.0.4
Java version: 1.7.0_25, vendor: Oracle Corporation
Java home: /Library/Java/JavaVirtualMachines/jdk1.7.0_25.jdk/Contents/Home/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "mac os x", version: "10.8.4", arch: "x86_64", family: "mac"
나는 compiler.source을 추가하고 내 라이브러리가 1.5 이상 JDK을 타겟으로하기 때문에 1.5 compiler.target :
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.5</source>
<target>1.5</target>
<compilerArgument>-Xlint:unchecked</compilerArgument>
</configuration>
</plugin>
</plugins>
</pluginManagement>
수있는 사람을 여기서 뭐가 잘못 됐는지 설명해 줄래? 여기에 잘못된 무엇
List<Throwable> errors = t.getErrors();
:
나를 위해, 그것은 t.getErrors (같은 이해가되지 않습니다)은 목록을 반환?!?
,'T'입니다 편치 않은. 단순히 '최종 설정 cfg; ... ThreadBase (Config cfg ...)' – ZhongYu
'T cfg' 필드는 기본 접근성으로 선언됩니다. 서브 클래스에서'T' 타입을 사용합니다. 그래서'T'는 쓸모가 없습니다. Btw, 내가 물어 본 질문과 관련이 없으며 어떤 대답도 제공하지 않습니다. –