根据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;
}