1

我想创建一个通用容器类,它可以包含其他类的一个对象。我认为这可能是一种合理的方法:

class Container <T> {
    private T thing;

    public void Store(T obj) {
        thing = obj;
    }

    public T ReturnIt() {
        return thing;
    }
}

当我尝试将其与一个 Book 类一起使用时,我收到以下错误消息:“注意:GenericContainer.java 使用未经检查或不安全的操作。注意:使用 -Xlint 重新编译:未检查详细信息。”

可能public T ReturnIt() { return thing; }是错误的原因,这是返回容器类中包含的对象的错误方法吗?当我尝试使用 -Xlint:unchecked 编译它时,我没有得到任何进一步的信息。我对错误消息有什么看法?

导致错误的代码:

class GenericContainer {

    public static void main(String[] args) {
        Container BookStorage = new Container <Book>();
        Book thejavabook = new Book("The Java book");   
        BookStorage.Store(thejavabook);
    }       
}

class Book {
    private String title;
    Book(String title) {
        this.title = title;
    }
}

class Container <T> {
    private T thing;

    public void Store(T obj) {
        thing = obj;
    }

    public T ReturnIt() {
        return thing;
    }
}
4

2 回答 2

3

您的 BookStorage 变量应该这样定义:

Container<Book> BookStorage = new Container <Book>();
于 2013-01-23T20:00:10.597 回答
2

我已经重写了您的代码以解决问题并使用 java 命名标准:

package com.sandbox;

public class Sandbox {

    public static void main(String[] args) {
        Container<Book> bookStorage = new Container<Book>();  //fix for your warning!
        Book theJavaBook = new Book("The Java book");
        bookStorage.store(theJavaBook);
    }
}


class Book {
    private String title;   //this is unused

    Book(String title) {
        this.title = title;
    }
}


class Container<T> {
    private T thing;

    public void store(T obj) {
        thing = obj;
    }

    public T returnIt() {
        return thing;
    }
}

强调这一行:

Container<Book> bookStorage = new Container<Book>();  //fix for your warning!

您忘记将 放在<Book>作业的左侧。

于 2013-01-23T20:02:06.993 回答