Java中的泛型转换
我想我有个设计问题
我得到一个输入:
- 列表:
List<String>
类型,例如"java.lang.string"
李> - 数据字符串
我想动态验证数据是否为list.get(i)
类型
更清楚地说:
我从数据库中得到如下列表list= {"java.lang.String", 'java.lang.Integer"}
我得到一个String
数据“123”。我想验证数据是否是list.get(1)
的实例。我的列表和数据值是动态的,可以更改
你可以在下面搜索框中键入要查询的问题!
我想我有个设计问题
我得到一个输入:
List<String>
类型,例如"java.lang.string"
李>
我想动态验证数据是否为list.get(i)
类型
更清楚地说:
我从数据库中得到如下列表list= {"java.lang.String", 'java.lang.Integer"}
我得到一个String
数据“123”。我想验证数据是否是list.get(1)
的实例。我的列表和数据值是动态的,可以更改
# 1 楼答案
我们应该假设一种方法
boolean isValueOfType(String value, String className)
assertTrue(isValueOfType("123", "java.lang.Integer"))
assertFalse(isValueOfType("ABC", "java.lang.Integer"))
李>如果没有马尔科建议的每个类都使用的代码,我看不到任何实现这种检查的方法
您可以通过一个函数映射合理地实现它,这些函数尝试将
value
转换为以下类型:还有一个单元测试
以上内容可能有些过头,但基本上是一个类型和适当转换器方法的查找表
如果不能使用Java8(lambdas),那么可以通过普通接口实现类似的功能
# 2 楼答案
在运行时,列表不是
List<String>
类型,它仅在静态类型计算级别可见,并且属于表达式的静态类型,而不是实例的动态类型在运行时,该列表属于实现
List
(例如,ArrayList
)的某种类型,它只包含一种或另一种类型的对象。类型可以是任何类型因此,使支票通用的方法必须基于反思。您必须通过
Class.forName(String)
检索该类,然后使用Class.isInstance(Object)
检查对象是否属于该类型# 3 楼答案
假设你有
List<Object>
之类的东西,为什么不把它转换成一个类,在原始列表中为每种类型都有一个列表,例如只需将所有实例排序到相应的列表中,就可以在新的java流中按类进行分组,或者
instanceof
等等。。 但那只是我的20美分。在其他编程语言中,有参数匹配,这是为这类事情而构建的。如果你在同一个系列中有不同的款式,然后需要问每个人,嘿,你到底是什么?这永远都不会是一件很容易的事您总是需要为新类型添加新代码,这就是为什么有接口来阻止这个问题。这是有目的的!(并不是说java是一种糟糕的语言)。这是为了让jvm运行得更快,更好地优化代码
我总是喜欢把java看作是一种更接近计算机硬件的语言之上的一层,但不太像python之类的东西!这样,你仍然可以写代码,这是非常快的