Java 如何在方法中动态传递对象和列表?

Java 如何在方法中动态传递对象和列表?,java,Java,我已使用以下方法检查表中的记录 private static boolean isPresent(StuPersonal object, List<StuPersonal> list) { for (StuPersonal candidate : list) { if (candidate.getFRID().equals(object.getFRID())) { return true; } } return false; }

我已使用以下方法检查表中的记录

private static boolean isPresent(StuPersonal object, List<StuPersonal> list)
  {
    for (StuPersonal candidate : list) {
    if (candidate.getFRID().equals(object.getFRID())) 
    {
        return true;
    }
}
return false;
}
private静态布尔值isPresent(Stuppersonal对象,列表)
{
(个人候选人:名单){
if(candidate.getFRID().equals(object.getFRID()))
{
返回true;
}
}
返回false;
}

这里Stuppersonal是一个类,list是Stuppersonal类的列表。我需要为不同的类重用这个方法。我怎么做?我有StuDegree、StudContact、StudCollege等及其列表。该过程必须在传递classes对象及其列表时完成。请建议..

让每个类定义
equals()
方法。然后你可以只做
list.contains(object)
,它将返回
boolean
。这是最首选的解决方案。

让每个类定义
equals()
方法。然后你可以只做
list.contains(object)
,它将返回
boolean
。这是最首选的解决方案。

如果所有这些类都有一个
getFRID()
方法,那么该方法应该位于接口中(例如
标识的
)。然后您可以使用:

private static <T extends Identified> boolean isPresent(T object, List<T> list) {
    String frid = object.getFRID(); // Adjust type appropriately
    for (Identified item : list) {
        if (item.getFRID().equals(frid)) {
            return true;
        }
    }
    return false;
}

考虑使用
Iterable
而不是
List

如果所有这些类都有一个
getFRID()
方法,那么它应该在一个接口中(例如
标识的
)。然后您可以使用:

private static <T extends Identified> boolean isPresent(T object, List<T> list) {
    String frid = object.getFRID(); // Adjust type appropriately
    for (Identified item : list) {
        if (item.getFRID().equals(frid)) {
            return true;
        }
    }
    return false;
}
<S extends Stu>boolean isPresent(S object, List<S> list)  {
    for (StuPersonal candidate : list) {
      if (candidate.getFRID().equals(object.getFRID()))     {
        return true;
      }
    }
    return false;
}
考虑使用
Iterable
而不是
List

布尔isPresent(S对象,List){
<S extends Stu>boolean isPresent(S object, List<S> list)  {
    for (StuPersonal candidate : list) {
      if (candidate.getFRID().equals(object.getFRID()))     {
        return true;
      }
    }
    return false;
}
(个人候选人:名单){ if(candidate.getFRID().equals(object.getFRID())){ 返回true; } } 返回false; }
其中,type
Stu
是StuDegree、StuContact、StuCollege等类型的公共超类或接口,它具有方法
getFRID()

布尔表示(S对象,列表){
(个人候选人:名单){
if(candidate.getFRID().equals(object.getFRID())){
返回true;
}
}
返回false;
}

其中type
Stu
是StuDegree、StuContact、StuCollege等类型的公共超类或接口,它的方法是
getFRID()

FRID对于您需要使用的所有类来说都是公共的吗?我刚刚声明为private,它可以修改,FRID不是所有类的公共变量,它是我在StuPersonal类中使用的一个变量,它也因每个类而异。实际上,我正在比较从主服务器到本地服务器的数据库记录,FRID对所有需要使用的类来说都是公共的吗?我刚刚声明它是私有的,可以修改,FRID不是所有类的公共变量,它是我在Stuppersonal类中使用的一个变量,它也因每个类而异。实际上,我正在比较从主服务器到本地服务器的数据库记录,在我看来,没有迹象表明这个单一属性适合作为相等比较。也许是,也许不是。@JonSkeet我不明白你们认为问题在哪里?若有其他属性需要相等,两个对象才能真正相等呢?这个问题是关于通过一个特定标识符查找对象;这并不一定意味着它适合作为一个通用的相等测试。对于每个类,他都会定义它的相等方法,根据需要比较尽可能多的属性。通过查看他提供的类名,他将只使用相同类实例的列表(只是猜测)。因此,仅使用标准java技术比在不需要时使其复杂化更方便。这也是我的建议。我接受乔恩的观点,也许这个比较不适合一般的等式——但我愿意打个小赌,在这种情况下,它是这样的。FRID的名称表示它是一个ID,而方法的名称(isPresent)表示如果列表中存在具有相同“FRID”的对象,则该对象被视为在列表中,这意味着匹配的FRID是相等的。OP应该明确地考虑这是否是他的正确的技术。没有迹象表明这个单一的属性是适当的,作为一个平等的比较,IMO。也许是,也许不是。@JonSkeet我不明白你们认为问题在哪里?若有其他属性需要相等,两个对象才能真正相等呢?这个问题是关于通过一个特定标识符查找对象;这并不一定意味着它适合作为一个通用的相等测试。对于每个类,他都会定义它的相等方法,根据需要比较尽可能多的属性。通过查看他提供的类名,他将只使用相同类实例的列表(只是猜测)。因此,仅使用标准java技术比在不需要时使其复杂化更方便。这也是我的建议。我接受乔恩的观点,也许这个比较不适合一般的等式——但我愿意打个小赌,在这种情况下,它是这样的。FRID的名称表示它是一个ID,而方法的名称(isPresent)表示如果列表中存在具有相同“FRID”的对象,则该对象被视为在列表中,这意味着匹配的FRID是相等的。OP应该明确地考虑这是否是他正确的技术。谢谢你的帮助。在我的方法中,Studio对象、列表列表、GETFRID()是动态的,可以为每个类改变。我需要发送不同的类、列表及其变量,以检查它是否存在。@mahes_Saujey:那么你应该在问题中指定它——这就是每个人解释问题的方式。如果您的类在注释中没有任何内容,那么很难看到如何编写通用代码来使用它们。如果它们都有某种标识符(相同类型),那么您可以有一个与之相关的接口(例如,
getId()
),只需在每个类中返回特定于类的标识符即可实现它。感谢您的帮助。在我的方法中