java - 如何仅根据java中赋值的类型来决定选择哪个函数
问题描述
我有以下课程
public class MyItems {
ItemA myItemA1 = new ItemA();
ItemA myItemA2 = new ItemA();
ItemB myItemB1 = new ItemB();
}
是否可以实现一个 Factory/Creator 类,以便该类可以更改为:
public class MyItems {
ItemA myItemA1 = Factory.create();
ItemA myItemA2 = Factory.create();
ItemB myItemB1 = Factory.create();
}
或者也许
public class MyItems {
ItemA myItemA1 = Factory.create<>();
ItemA myItemA2 = Factory.create<>();
ItemB myItemB1 = Factory.create<>();
}
我正在考虑列表的分配:
List<String> list = new ArrayList<>();
您也只有右侧的钻石。
注意:如有必要,您可以将泛型引入ItemX对象
解决方案
您正在尝试做的事情可能会像
ItemA myItemA1 = (ItemA) Factory.create<ItemA>();
或者
ItemB myItemB1 = Factory.createItemB();
因为如前所述,Factory 无法猜测要返回的类型(它甚至无法返回不同的类型,因此强制转换是必要的)。如果你能想出一些逻辑来让工厂在 100% 的时间内猜测返回类型,那么类似的东西ItemA myItemA1 = (ItemA) Factory.create()
可能会起作用,但它绝对会破坏代码的可读性,所以不要这样做。
这个问题有一个实例,在哪里Factory.create()
可以毫无问题地实现:当所有ItemX
-Types 都是接口时。在这种情况下,您可以创建一个类
public class ItemGeneric implements ItemA, ItemB, ItemC {
//implementation off all three interfaces here
}
并让您的工厂总是返回一个ItemGeneric
.
推荐阅读
- javascript - 使用 BeautifulSoup4 从 Jquery DataTable 解析行
- python-3.x - Python - 如何在不分页的 URL 中抓取分页页面
- odbc - 在 Windows 上从 pyodbc 连接到 MarkLogic ODBC 服务器时出错
- javascript - google.script.run 执行但它返回“null”,而 code.gs 函数确实有/log 值要返回
- .net - 在 DNN 和 Microsoft Dynamics CRM 中同步用户
- typescript - 如何用双箭头函数编写 Typescript 界面
- c++ - 为什么我可以访问类外的私有结构成员
- node.js - 打印股票图表时代码中出现不需要的循环
- javascript - 如何摆脱隐藏元素造成的额外空白?
- rust - 如何在 Warp 中创建可变路径?