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;
}
其中,typeStu
是StuDegree、StuContact、StuCollege等类型的公共超类或接口,它具有方法getFRID()
布尔表示(S对象,列表){
(个人候选人:名单){
if(candidate.getFRID().equals(object.getFRID())){
返回true;
}
}
返回false;
}
其中typeStu
是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()
),只需在每个类中返回特定于类的标识符即可实现它。感谢您的帮助。在我的方法中