当前位置: 首页 > 知识库问答 >
问题:

获取方法的返回值,该方法来自java中的泛型类

养鸿运
2023-03-14

我创建了一个父类Repo,它具有用于在列表中插入、删除、显示和删除对象的方法。回购是一个泛型类。我为Repo创建了一个子类(如DepartmentRepo类)和pass Department、Employee等。上课。我想对传递到Repo类的任何类对象执行插入、删除、显示和删除操作。我需要获得方法“get”的返回值,它来自Java中的泛型类。我只能从泛型中获得方法名这里我提到了代码文件

public class Department {
    private long Id;
    private String Name;
    private String Location;
    
    public Department() {
        
    }
    
    public Department(long id, String name, String location) {
        super();
        Id = id;
        Name = name;
        Location = location;
    }
    public long getId() {
        return Id;
    }
    public void setId(long id) {
        Id = id;
    }
    public String getName() {
        return Name;
    }
    public void setName(String name) {
        Name = name;
    }
    public String getLocation() {
        return Location;
    }
    public void setLocation(String location) {
        Location = location;
    }
    
    

}


import java.util.ArrayList;
import java.util.List;

public class Repo<T, U> {
    List<T> list = new ArrayList<T>();

    public List<T> getAll() {
        return list;
    }

    public void insert(T obj) {
        list.add(obj);
    }

    public T get(U id) throws NoSuchMethodException, SecurityException {
        for (T ele : list) {
            if (ele.getClass().getMethod("getId") == id) {
                return ele;
            }
        }
        return null;
    }

    public void delete(U id) throws NoSuchMethodException, SecurityException {
        list.remove(get(id));
    }
}
public class DepartmentRepo extends Repo<Department, Long>{

}
class MainApi
{
    public static void main (String[] args)
    {
        DepartmentRepo dept = new DepartmentRepo ();
        Department ict=new Department(10001,"Dept of ICT","Town");
        Department cs=new Department(10002,"Dept of Computer Science","Pampaimadu");
        Department bio=new Department(10003,"Dept of Bio Science","Pampaimadu");
        Department sats=new Department(10004,"Dept of Statistics","Kurumankadu");
        
        dept.insert(ict);
        dept.insert(cs);
        dept.insert(bio);
        dept.insert(sats);
        System.out.println();
        dept.getAll();
        try{
            dept.get(10001);
        }
        catch(Exception e){
            
        }
        
        
    }
}

共有1个答案

訾高飞
2023-03-14

您需要调用getId()方法,以便它返回id以正确执行比较:

import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.List;

public class Repo<T, U> {
    List<T> list = new ArrayList<T>();

    public List<T> getAll() {
        return list;
    }

    public void insert(T obj) {
        list.add(obj);
    }

    public T get(U id) throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
        for (T ele : list) {
            if (ele.getClass().getMethod("getId").invoke(ele).equals(id)) {
                return ele;
            }
        }
        return null;
    }

    public void delete(U id) throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
        list.remove(get(id));
    }
}

 类似资料:
  • 问题内容: 背景 我曾经写过这种方法: 应该这样称呼它: 这很好用(尽管我在研究当前容易出错的问题时在这里的答案中已经看到)。 目前的情况 无论如何,现在我正在编写以下代码(在扩展javax.servlet.jsp.tagext.TagSupport的类中): 目的是可以这样称呼: 我的评估方法中的代码显然不起作用。的第二个参数应该是Class对象。这导致我: 我的问题 如何获得通用(返回)类型的

  • Java中是否有一种方法可以通过一个方法的声明返回不同的类型? 我希望此方法返回一个对象,并在函数调用时将其转换为正确的类型。这就是我的想法,但它不是这样工作的。我是否需要某种通用返回类型来执行此操作?解决这个问题的最佳方法是什么?

  • 我得到了ClassCastException。我正在遵循这个答案,但没有得到正确的答案。将对象转换为通用类型以返回 BubbleSort.java MainPorgram.java 安慰 线程“main”Java . lang . classcastexception中出现异常:无法转换[ljava . lang . object;to [I at java.lang.Class.cast(未知来

  • 问题内容: 如果在Java中创建泛型类(该类具有泛型类型参数),则可以使用泛型方法(该方法带有泛型类型参数)吗? 考虑以下示例: 正如您对通用方法所期望的那样,我可以使用任何对象调用的实例: 但是,如果我尝试使用 不 指定泛型类型的实例,则无论传入什么,我都会调用返回, 奇怪的是,如果返回类型是通用类,它将编译(例如(实际上,这可以解释-参见下面的答案)): 此外,如果输入通用类,即使仅使用通配符

  • 如果在Java中创建泛型类(该类具有泛型类型参数),是否可以使用泛型方法(该方法采用泛型类型参数)? 考虑下面的例子: 正如您所期望的那样,对于任何对象,的实例,我都可以调用: 但是,如果我试图使用的实例而不指定泛型类型,那么调用将返回一个

  • 现在我希望以泛型的方式使用这些类。 如何从方法“method1”和“method2”返回泛型类型(可以是猫或狗)。我有几个返回“T extends Animal”的方法,所以最好在方法级别或类级别中声明泛型类型。