根据对象类型将对象添加到列表

扬·霍奇奇卡

我有一个将对象存储在列表中的类。我有3种不同类型的列表,我想将对象保存在各自的列表中。如您所见,我必须重复该方法3次,每种类型一次,尽管在每种情况下,该方法执行的功能完全相同。

题:

有没有一种方法可以使用例如泛型或接口的一种方法来编写相同的功能?

原始代码:

@Repository
public class ItemsInMemoryDao {
    
    static List<MyCompany> companies = new ArrayList<>();
    static List<Financial> financials = new ArrayList<>();
    static List<Stock> stocks = new ArrayList<>();;

    // TODO: Rewrite using generics or interface?
    static void saveCompany(MyCompany company) {
        companies.add(company);
    }

    static void saveFinancial(Financial financial) {
        financials.add(financial);
    }

    static void saveStock(Stock stock) {
        stocks.add(stock);
    }

}

请求状态:

@Repository
public class ItemsInMemoryDao {

    static List<MyCompany> companies = new ArrayList<>();
    static List<Financial> financials = new ArrayList<>();
    static List<Stock> stocks = new ArrayList<>();;

    static void save(Object object) {
        // implementation here 
    }

}
安德烈亚斯

有没有一种方法可以使用例如泛型或接口的一种方法来编写相同的功能?

是的,不,但是可以,但是不这样做。

可以使用称为“一个”的方法来完成save吗?
是的,使用方法重载。
这是推荐的方法。

static void save(MyCompany company) {
    companies.add(company);
}

static void save(Financial financial) {
    financials.add(financial);
}

static void save(Stock stock) {
    stocks.add(stock);
}

能用一种真正的方法完成吗?
是的,instanceof在实现中使用。
这是非常气馁,因为你会失去了Java的类型安全。

static void save(Object object) {
    if (object instanceof MyCompany)
        companies.add((MyCompany) company);
    else if (object instanceof Financial)
        financials.add((Financial) company);
    else if (object instanceof Stock)
        stocks.add((Stock) company);
    else
        throw new IllegalArgumentException("Argument is of unknown type: " + object.getClass().getName());
}

例如,如果调用者尝试调用save("Foo"),第一个解决方案将无法编译,因此您立即知道有问题,而第二个解决方案将编译就好了,直到尝试运行有问题的代码,您才知道有问题。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将对象添加到通用列表

来自分类Dev

将对象添加到列表

来自分类Dev

Unity-将对象添加到通用列表时类型不匹配

来自分类Dev

使用有界类型参数将对象添加到列表

来自分类Dev

将对象添加到对象数组

来自分类Dev

将对象添加到对象数组

来自分类常见问题

将对象字段添加到列表的最佳方法

来自分类Dev

在C#中将对象添加到列表

来自分类Dev

OOP解析并将对象添加到列表

来自分类Dev

将对象添加到链接列表C ++

来自分类Dev

使用GUI将对象添加到数组列表

来自分类Dev

将对象添加到循环列表的末尾

来自分类Dev

在创建时或创建后将对象添加到列表

来自分类Dev

将对象添加到带有for循环的列表中?

来自分类Dev

将对象添加到列表时发生重载错误

来自分类Dev

可能的逻辑问题将对象添加到数组列表

来自分类Dev

无法将对象添加到我的列表中

来自分类Dev

将对象添加到Java列表中

来自分类Dev

在初始化时将对象添加到列表

来自分类Dev

如何使用 setState 将对象添加到数组列表

来自分类Dev

使用函数将对象添加到列表中

来自分类Dev

将对象添加到GroupBox问题

来自分类Dev

将对象的副本添加到ArrayList

来自分类Dev

Json:将对象添加到数组

来自分类Dev

将对象添加到数组

来自分类Dev

JSF将对象添加到arrayList

来自分类Dev

将对象添加到数组

来自分类Dev

将对象添加到数组末尾

来自分类Dev

无法将对象添加到数组