java - Java 中的泛型类转换

标签 java generics casting

您好,我有非常相似的类(class)(汽车、客户、预订)。在这些类中,我具有相同的功能,例如(添加、删除、getItem、getAll 和排序)。

public class Clients {  
    List<Client> persons = new ArrayList<Client>(); 

    public void add (Client k) {
        persons.add(k);
    }

    public void delete (Client k) {
        persons.remove(k);
    }

    public Client getKlienet(int id) {
       for ( Client k: persons) {
           if ( k.getId() == id)
               return k;
       }            

       return null;
    }

    public List<Client> getAllClients() {
        List<Client> temp = new ArrayList<Client>();                
        temp.addAll(persons);   

        return temp;
    }

    public List<Client> sortujKontakty() {
        Collections.sort(persons);          

        return persons;
    }

我想用这些类来处理一个通用类。但我有很多问题.. 首先使用函数 getId() (该函数仅返回 Id 的值),然后使用 sort() 方法。 Compareto() 方法与其他类不同。

所以,我完成了界面:

public interface ManagerInterface <T> { 
    public void    add (T t );
    public void    delete ( T t);
    public T       getRecord(int id);
    public List<T> getAll();
    public List<T> sort();  
}

和类(class):

public class RecordManager<T> implements RecordManagerInterface <T> {
    private T id;

    public T getId() {
        return id;
    }

    public ArrayList<T> record = new ArrayList<T>();

    @Override
    public void add(T t) {
        record.add(t);  
    }

    @Override
    public void delete(T t) {
        record.remove(t);
    }

    @Override
    public T getRecord(int id) {
        for ( T k: record) {
            if ( ((Client) k).getId() == id)
                return k;
            else if ( ((Person) k).getId() == id)
                return k;
            else if ( ((Reservation) k).getId() == id)
                return k;               
        }

        return null;
    }

    @Override
    public List<T> getAll() {
        List<T> temp = new ArrayList<T>();              

        temp.addAll( record);   

        return temp;        
    }

    @Override
    public  List<T> sort() {
        Collections.sort(record);           

        return record;      

    }

请提供任何帮助。

最佳答案

如果您有类似的类,请尝试为它们创建通用接口(interface),

interface  HasId { 
int getId();
}

那么您需要做的就是让您的类实现它,并将您的 RecordManager 更改为

public class RecordManager<T extends HasId> implements RecordManagerInterface <T> {
...
}

这意味着你的 T 必须实现你的接口(interface), 所以你的 get getRecord 方法会简单得多

 public T getRecord(int id) {
        for ( T k: record) {
           if (k.getId() == id)
               return k;
        }

        return null;
    }
<小时/>

编辑 假设您的通用界面是

 interface CommonInterface<T> extends Comparable<T> {
 public int getId(); 
}

那么你的类的定义将是,即

Person implements CommonInterface<Person> {
...
}

您的RecordManager

 class RecordManager<T extends CommonInterface<T>> implements
            RecordManagerInterface<T>{
}

这应该可以解决所有排序问题

关于java - Java 中的泛型类转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22813934/

相关文章:

java - 如何在ant上显示system.out(在控制台中)?

java - 从一个类的数组中获取另一类的值

java - 将新的 OSGI 包添加到本地 p2 存储库

php - 将数组中的所有数字值转换为整数类型,否则将非数字值保留为字符串

java - 以编程方式将随机图像设置为 ImageButton

java - 让 Java 应用程序作为 Applet 或独立运行

java - 实例化泛型类的 JAVA 数组

java - 子类型 "promise"如何调用更具体类型的回调?

c# - 如何在 C# 中实现某种程度的多态性?

casting - F# 转换一个 int