2012-07-31 40 views
9

tôi có chức năng này ném lỗi lạ khi tôi cố gắng để làm một "mvn cài đặt"Lỗi: thông số loại <T> T không thể được xác định trong Maven Install

public <T> T get(final AN_ENUM key) 
{ 
    return some_map.get(key); 
} 

Đây là dòng mà tôi nhận được lỗi

final int value = get(AN_ENUM.A_FIELD); 

Và đây là lỗi trong maven:

XXX.java:[25,41] type parameters of <T>T cannot be determined; 
    no unique maximal instance exists for type variable T with 
    upper bounds int,java.lang.Object 

tôi biết đã làm thế nào để "sửa chữa nó" . Tôi chỉ cần thay đổi int thành Integer trong mẫu mã cuối cùng của tôi và lỗi này biến mất. Nó cho tôi biết rằng maven, vì một số loại lý do là không thể cast một Integer như một int khi tôi sử dụng một tham số kiểu.

Câu hỏi của tôi là .. tại sao?

Trong nhật thực, sử dụng cùng một JDK, tôi đã có thể chạy ứng dụng của mình mà không gặp bất kỳ sự cố nào cũng như cảnh báo.

  • JDK 1.6
  • Indigo Dịch vụ Eclipse Release 2
  • Maven 3.0.4
+2

Mức nguồn trong plugin trình biên dịch maven trong tệp POM.xml là gì? Nó có được đặt dưới 1,5 không? – GMK

+2

Điều gì sẽ xảy ra nếu bạn biên dịch với javac? Bạn có thể thấy đây là sự khác biệt giữa ECJ và javac. – hertzsprung

Trả lời

3

Trong pom.xml của bạn, thiết lập các phiên bản mục tiêu ít nhất 1.5:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-compiler-plugin</artifactId> 
    <version>2.0.2</version> 
    <configuration> 
     <source>1.5</source> 
     <target>1.5</target> 
    </configuration> 
</plugin> 

này Cách này, Maven sẽ sử dụng JDK 1.5 (hoặc bạn có thể đặt nó thành 1.6 nếu bạn muốn).

+0

Ok, tôi không biết cách khắc phục sự cố nhưng tôi tự hỏi tại sao nó không biên dịch. – SLuceri

11

Tôi gặp vấn đề tương tự và hóa ra tôi đang cố trả về "boolean" (nguyên thủy) và không phải là "Boolean" (Object). Vì bạn đang cố gắng đặt nó thành "int" (nguyên thủy) nó sẽ kết thúc thất bại.

Hãy thử thay đổi "int" thành "Integer" và hy vọng điều đó sẽ khắc phục.

Các vấn đề liên quan