根据Java中输入参数的类型决定如何执行方法

根据Java中输入参数的类型决定如何执行方法,java,list,methods,return,Java,List,Methods,Return,我使用以下方法查找与allVectors中的输入向量v相似的向量(double列表),并返回它们的索引(int列表): 公共列表返回相似(列表v,列出所有向量); 现在,如果v是一个列表,我希望该方法执行一组特定的语句(a语句),并返回List。如果v是列表,我希望该方法执行另一组语句(B语句)并返回List 如何做到这一点?使您的方法具有通用性: public <T> List<Integer> returnSimilar(List<T> v, List&

我使用以下方法查找与
allVectors
中的输入向量
v
相似的向量(double列表),并返回它们的索引(int列表):

公共列表返回相似(列表v,列出所有向量);
现在,如果
v
是一个
列表
,我希望该方法执行一组特定的语句(a语句),并返回
List
。如果
v
列表
,我希望该方法执行另一组语句(B语句)并返回
List


如何做到这一点?

使您的方法具有通用性:

public <T> List<Integer> returnSimilar(List<T> v, List<List<T>> allVectors);

使您的方法通用:

public <T> List<Integer> returnSimilar(List<T> v, List<List<T>> allVectors);

您可能需要研究方法重载。。这可能会有帮助..或者你使用instanceof:
如果(v instanceof List){…
但不是@ryekayo的最佳实践协议。似乎你想要两个不同的签名,SO应该是两个不同的方法。凯文:这似乎不太好OOP@KevinWallis类型擦除可防止这种情况发生。(例如)感谢您的提示!您可能需要研究方法重载..这可能会有所帮助..或者您可以使用instanceof:
if(v instanceof List){…
但这不是@ryekayo的最佳实践。似乎你需要两个不同的签名,SO应该是两个不同的方法。凯文:这似乎不太好OOP@KevinWallis输入擦除可以防止这种情况。(例如)谢谢你的提示!我不明白你的意思:“如果您确实需要实现不同于T的逻辑,请引入重载方法。如何根据不同类型的v提供不同的实现?如果v是
列表
,请执行A语句;如果v是
列表
,请执行B语句。在帖子中添加了一个解释。我不明白您的意思:”如果你真的需要实现不同于T的逻辑-引入重载方法。“我如何根据不同类型的v提供不同的实现?如果v是
列表
,则执行A语句;如果v是
列表
,则执行B语句。在文章中添加了一个解释
public <T> List<Integer> returnSimilar(List<T> v, List<List<T>> allVectors) {
    List<Integer> result = new ArrayList<>();
    for(int i = 0; i < allVectors.size(); i++) {
        if (allVectors.get(i).isSimilar(v)) {
            result.add(i);
        }
    return result;
}

public <T> boolean isSimilar(List<T> a, List<T> b) {
    if (a.size() != b.size()) return false;
    for (int i = 0; i < a.size(); i++) {
        if (!a.get(i).equals(b.get(i))) {
            return false;
        }
    return true;
}