如何使这成为Java中的泛型方法?

时间:2009-07-11 18:17:42

标签: java generics

public void setSRC(int var)
{
    if (src== null)
    {
        src = new int[1];
        src[0] = var;
    }
    else
    {
        int i = 0;
        int[] temp = null;
        temp = new int[src.length];
        temp = src;
        i = temp.length;
        src = new int[i+1];
        for (int j =0; j < temp.length ; j++)
                    src[j] = temp[j];
        src[i] = var;

    }
}

我希望将此方法设为通用或模板方法。任何形式的帮助表示赞赏。期待它

4 个答案:

答案 0 :(得分:5)

使用集合而不是数组。除了Java数组不与泛型混合之外,它们实际上被设计为附加到。您的代码可以替换为:

private List<T> src = new ArrayList<T>();

public <T> void setSRC(T var) {
    src.add(var);
}

答案 1 :(得分:0)

使用通用集合,使用Java数组。

public <T> void setSRC(T var)

而不是

new int[1]

使用

Collection<T> collection = new ArrayList<T>();

答案 2 :(得分:0)

这种表示法对于Java初学者来说非常混乱。所以这里是整数类型值的jqno示例:

private List<Integer> src = new ArrayList<Integer>();

public void setSRC(Integer var) {
    src.add(var);
}

现在src是一个只能存储Integer类型对象的ArrayList,这与你的问题非常接近。它不能存储int值(int类型不是对象),但Java 5/6会在必要时将int转换为Integer(autoboxing),因此您可以使用(int)i调用setSRC。

如果要使用数组并需要更改大小,请查看System.arraycopy(..)方法。

答案 3 :(得分:-1)

此代码将创建一个具有通用数据类型的类,并将存储该数据类型的动态对象数组。

import java.util.*;
class Test2<T>
{
    private Collection<T> src = new Vector<T>();

    public void setSRC(T var)
    {
        src.add( var );
    }

    public static void main( String[] args )
    {
        Test2 t = new Test2<Integer>();
        t.setSRC( 5 );
        Test2 t2 = new Test2<Double>();
        t.setSRC( 5.5 );
    }
}

问题是,如果这就是你所做的一切,就没有必要打扰了。看起来你正在尝试编写自己的动态数组类,而Java在Collections Framework中有很多类可供选择。为什么重新发明轮子?

现在,如果您正在尝试做一些具体的事情,请告诉我们您要完成的工作,我们可以提供更好的答案。