2013-03-24 60 views
5

Đây thực sự là một vấn đề kỳ lạ, tôi chưa bao giờ gặp phải vấn đề như vậy. Sau đây là một lớp trợ giúp tôi đã khai báo bên trong một lớp lớn hơn. Nó chạy hoàn toàn tốt như sau:Lỗi loại không phù hợp giữa java.lang.String và String

private static class Tree<String> { 
    private Node<String> root; 

    public Tree(String rootData) { 
     root = new Node<String>(); 
     root.data = rootData; 
     root.children = new ArrayList<Node<String>>(); 
    } 

    private static class Node<String> { 
     String data; 
     Node<String> parent; 
     ArrayList<Node<String>> children; 
    } 
} 

Tuy nhiên, do rối tung xung quanh, tôi đã phát hiện ra một vấn đề gây nhầm lẫn. Bằng cách thay thế dòng này:

root.data = rootData; 

với:

root.data = "some string literal"; 

tôi nhận được lỗi này:

Type mismatch: cannot convert from java.lang.String to String 

Tôi đã thử nghiệm một số chuỗi nhiệm vụ chữ trong các lớp khác và nó xuất hiện để làm việc một cách hoàn hảo khỏe. Gần đây tôi đã cập nhật lên Java 1.7.0_15 và gần đây đã tải xuống và cài đặt Eclipse 4.2. Tôi nghi ngờ có thể có một số nhầm lẫn trong đường dẫn xây dựng hoặc một cái gì đó. Sử dụng Ubuntu 12.04

Mọi trợ giúp sẽ được đánh giá cao! Tôi đã tìm kiếm và tìm kiếm và không thể tìm thấy bất kỳ điều gì gần với vấn đề này.

+0

Điều này thực sự thú vị. Tôi đã không bao giờ đi qua bất cứ điều gì như thế này trước đây. –

Trả lời

7

Bạn đang tạo thông số loại chung chung có tên "Chuỗi", có thể không phải là thứ bạn muốn.

Thay đổi

private static class Tree<String> { 

để

private static class Tree { 
2

Có vẻ như bạn đang cố gắng tạo một lớp chung bằng cách sử dụng "Chuỗi" làm tên của loại chung chung của bạn. Những kiểu generic nào làm bất cứ khi nào bạn tạo một đối tượng từ lớp, nó sẽ thay thế bất kỳ thứ gì trong kiểu <> với kiểu mới.

Vì vậy, trong lớp học của bạn, nếu bạn đã tạo Tree<Integer>, ví dụ như "Chuỗi" trong lớp học của bạn sẽ được thay thế bằng "Số nguyên". Đây là cách một số lớp như ArrayList làm việc để cho phép bất kỳ loại nào được sử dụng.

Thông thường khi sử dụng các loại chung, một chữ cái, chẳng hạn như "T", được sử dụng để tránh nó giống như một loại lớp thực.

Vì vậy, trong trường hợp của bạn, bạn đang cố gắng đặt "Chuỗi" không thực sự là Chuỗi dưới dạng chuỗi thực tế.

0

Tôi giải quyết nó bằng cách gõ

import java.lang.String;