2011-02-25 2 views
5

-Xlint 스위치를 사용하려고 시도한 후 2 개의 경고가 나타납니다. 어떻게 이러한 경고를 해결할 수 있습니까?javac -Xlint에서 경고를 받음 : 선택하지 않았습니다.

test:quadrantRDBTemplate mymac$ javac -Xlint:unchecked -cp mysql-connector-java-5.0.jar:iucbrf.jar *.java 
QuadrantSystemRDB.java:271: warning: [unchecked] unchecked call to put(K,V) as a member of the raw type java.util.HashMap 
    argMap.put(xKey, new UniformDistribution(-1, 1)); 
      ^
QuadrantSystemRDB.java:272: warning: [unchecked] unchecked call to put(K,V) as a member of the raw type java.util.HashMap 
    argMap.put(yKey, new UniformDistribution(-1, 1)); 
      ^
2 warnings 

답변

7

원시 형식은 형식 인수를 가질 수 있지만 유지되지 않은 형식입니다. 예를 들어 Map (및 HashMap)은 키와 값의 유형에 대해 각각 KV 유형 매개 변수를 가질 수 있습니다.

Map<Integer,String>을 지정하면지도에 Integer 개의 개체가 키로 포함되어 있으며이 개체를 String 개체에 매핑합니다.

단순히 Map을 사용하는 경우 해당 정보를 제공하지 않습니다. 원시 형식은 대부분 이전 버전과의 호환성을 위해 존재하며 새로운 코드에서 사용할 수있는 이유가 없습니다.

해결책 : Map에 적절한 유형을 제공하십시오. 코드에 따르면 VUniformDistribution이고 KyKeyxKey 유형입니다.

1

argMap의 제네릭을 사용하십시오. 나는 당신의 코드에서 나온 QuadrantSystemRDB이라고 생각한다. 그렇지 않으면 아무것도 할 수 없습니다.

4

제네릭을 사용해야합니다! 당신이 목록 객체를 선언 할 필요가 있기 때문에

Map<String, UniformDist> argMap = new HashMap<String, UniformDist>() 
1

아마, 즉 말 (예) '>' '<'를 생략하지 않고 : :로 xKey 유형이 String의 말 다음 argMap를 선언

List<Integer> list = new ArrayList(); 

NetBeans없이 스택에 객체를 선언하려고했는데 NetBeans가 오류 메시지없이 내 코드를 컴파일했습니다. 어쩌면, javac 컴파일러와 상황이 다를 수도 있습니다.

관련 문제