我有几个班级和一些名单:
A
B : A
C : A
D : A
...
SomeList<A> list
通过C#,我可以按类型获得所需的对象:
public T getObject <T> () where T : A {
return (T)objects[typeof(T)];
}
public A objects [Type _type] {
get {
var temp = from _a in _list where _a.GetType() == _type select _a;
return temp.FirstOrDefault();
}
}
如何使用java获取它?
答案 0 :(得分:1)
在Java中你会这样做:
public <T> T getObjectByType(Class<T> cl) {
for (Object item : _list) {
cl.isInstance(item) {
return (T)item;
}
}
return null;
}
您可以这样称呼它:
B b = someList.getObjectByType<B>(B.class);
您也可以在C#中以相同的方式执行此操作,但LINQ使其更简单。
答案 1 :(得分:1)
如果你知道对象的可能类型,你可以使用
instanceof
operator.例如:
SomeList<A> list;
for(int i = 0; i < list.size(); i++){
if( list.get(i) instanceof AClass){
.....
}else if(list.get(i) instanceof BClass){
.....
}
}
答案 2 :(得分:1)
您可以在java中使用instanceof
来检查对象类型。
for (T x : list) {
if (T instanceof MyClass) {
// Do your stuff...
}
}
答案 3 :(得分:1)
我不知道C#。但是,在Java中,如果您有一个地图,并且希望收集按类型检索的给定类型的单个对象,则可以执行以下操作:
Map byType = new HashMap<Class<A>, A>();
void insertObject(Object v) {
byType.put(v.getClass(), v);
}
Object getObject(Class c) {
return byType.get(c);
}
当然,您只能存储给定类型(类)的单个对象。如果要存储给定类型的多个对象,可能需要使用muitimap。有许多库包括这样的集合,例如org.apache.commons.collections,google的guava(com.google.common.collect)等。
HTH
-Steve
答案 4 :(得分:1)
您可以像这样在Java中使用instanceOf。
import java.util.ArrayList; import java.util.List;
public class Test{
public static void main(String[] args){
/*
* List of A object
*/
List<A> objectList = new ArrayList();
/*
* Adding object to the list
*/
objectList.add(new A());
objectList.add(new B());
objectList.add(new B());
/*
* Iterate through list and display object's type
*/
for(A a : objectList) {
if(a instanceof A) {
System.out.println(a.getClass().getName());
}
if(a instanceof B) {
System.out.println(a.getClass().getName());
}
}
}
/*
*
*/
static class A {
}
static class B extends A {
}
static class C extends A {
}
}