如何通过java传递数据类型并在方法中使用它?

如何通过java传递数据类型并在方法中使用它?,java,types,return,arguments,Java,Types,Return,Arguments,编辑: 以下是我正在尝试的工作方法 public static <T> void save(T t, Object o, String fileName) { ObjectOutputStream out = new ObjectOutputStream( new FileOutputStream(fileName)); out.writeObject((T)o);

编辑: 以下是我正在尝试的工作方法

public static <T> void save(T t, Object o, String fileName)
{
        ObjectOutputStream out = 
                new ObjectOutputStream(
                        new FileOutputStream(fileName));
        out.writeObject((T)o);
        out.close();
}

public static <T> T load(T t, String fileName)
{
    T object = null;

    ObjectInputStream in = 
            new ObjectInputStream(
                    new FileInputStream(fileName));
    object = (T)in.readObject();
    in.close();

    return (T)object;
}
但是有了load()我就不能让它工作了。 以下操作不起作用,我得到“类型不匹配:无法从类转换为int”

如果我将其更改为Eclipse建议的内容:

Class<Integer> test = method(int.class);
Class测试=方法(int.Class);
我得到了一个异常:“java.lang.Integer不能转换为java.lang.Class”


那么,我应该如何使用T作为返回类型来让它工作呢?

尽管我对总体设计有着普遍的关注,但就让实际代码工作而言,真正的问题是,您不需要将int.class传递给T变量—您需要传递要编写的对象

因此,只要将代码更改为:

public static <T> void save(T t, String fileName)
{
        ObjectOutputStream out = 
                new ObjectOutputStream(
                        new FileOutputStream(fileName));
        out.writeObject(t);
        out.close();
}

public static <T> T load(String fileName)
{
    T object = null;

    ObjectInputStream in = 
            new ObjectInputStream(
                    new FileInputStream(fileName));
    object = (T)in.readObject();
    in.close();

    return (T)object;
}
尽管如此,这种方法仍存在许多问题。正如您已经知道的类型一样,在本例中,使用T变量实际上是零值的,您不会从中获得太多好处

如果类型错误,则转换仍将在运行时失败。e、 g.此代码仍将引发一个
ClassCastException,
,因为编译器知道您期望T为整数,并将尝试将其强制转换为整数,但实际字符串已从文件中加载

    save("A String", "C:\\test2.dat");
    Integer t1 = load("C:\\test2.dat");
我不确定它到底有多有用——但就让代码实际工作而言,这应该没问题


此外,您提供的代码没有编译,因为文件处理中的异常会引发
IOException
,您既没有捕获也没有声明要抛出该异常。我没有改变这一点。

阅读文档()和谷歌示例()问:你到底想要什么?如果您想“编写一些通用的东西”,那么请使用Java1.5++。如果你想“重新发明”泛型,那就不要。考虑一下你可以用java做什么,或者java兼容的脚本语言,比如TrimimOM:谢谢,这对我有帮助。但我不能让它工作时使用返回。不,我不想重新发明任何东西。我想要的是问题,不是吗?你能展示更多你的新代码吗?现在还不清楚你改变了什么。我想这是一种比我尝试的更好的方法,所以我将使用这种方法运行。非常感谢。我还从代码中删除了try-catch,只是为了显示相关的内容。
public static <T> void save(T t, String fileName)
{
        ObjectOutputStream out = 
                new ObjectOutputStream(
                        new FileOutputStream(fileName));
        out.writeObject(t);
        out.close();
}

public static <T> T load(String fileName)
{
    T object = null;

    ObjectInputStream in = 
            new ObjectInputStream(
                    new FileInputStream(fileName));
    object = (T)in.readObject();
    in.close();

    return (T)object;
}
    save(50, "C:\\test.dat");
    save("A String", "C:\\test2.dat");

    Integer t1 = load("C:\\test.dat");
    System.out.println(t1);

    String t2 = load("C:\\test2.dat");
    System.out.println(t2);
    save("A String", "C:\\test2.dat");
    Integer t1 = load("C:\\test2.dat");