gpt4 book ai didi

JAVA将 "unknown"类型的对象转换为另一个对象的类型

转载 作者:太空宇宙 更新时间:2023-11-04 13:57:40 26 4
gpt4 key购买 nike

我是新来的,我想从第一个不太容易描述的问题开​​始。我认为一段代码最能解释。

public void erlaube(Geraet pGeraet){
for(Object g : mGeraetetypen){
if(pGeraet.getClass().equals(g.getClass())){
System.out.println("TRUE");
mErlaubt.add((g.getClass())pGeraet); // MY PROBLEM
}
//System.out.println(pGeraet.getClass());
//System.out.println(g.getClass());
}
}

“Geraet”(设备)是一个抽象类,它可以是传感器或 Actor f.ex。温度传感器类。

Geraetetypen(Devicetypes)是一个ArrayList,包含所有可用的传感器和Actor。

for 和 if block 检查参数 Object 是否是 Devicetypes 列表 f.ex 中包含的对象的类型。温度感应器。如果是,我想将其作为此数据类型(温度传感器)添加到“mErlaubt”(mAllowed)ArrayList中。

因此它应该与此(强制转换)执行相同的操作:

mErlaubt.add( (Temperatursensor) pGeraet);

但我不想使用(温度传感器)进行显式转换。我想使用从比较的数据类型列表中找到的数据类型进行动态转换。

也许类似于带有注释的行//MY PROBLEM,但这不起作用。

我知道这很难,而且我的描述也不是很好,但我希望你理解我尝试做的事情。请帮忙。如果您不明白或有疑问,请询问..谢谢!

最佳答案

引用您的code sample ,我建议存储允许的而不是允许的类的实例。您可以使用此修改后的代码:

public class Deviceplace {

Set<Class<? extends Geraet>> mErlaubt;

public Deviceplace(){
mErlaubt = new HashSet<>();
}

public void erlaube(Class<? extends Geraet> clazz) {
mErlaubt.add(clazz);
}

// Option 1: no subtypes of the allowed types
public boolean isErlaubt(Geraet pGeraet) {
return mErlaubt.contains(pGeraet.getClass());
}

public static void main(String[] args) {
Deviceplace place = new Deviceplace();
place.erlaube(Temperatursensor.class);
System.out.println(place.isErlaubt(new Windsensor()));
System.out.println(place.isErlaubt(new Temperatursensor()));
}

}

也包含子类型的 isErlaubt 的替代实现是:

  // Option 2: including subtypes of the allowed types
public boolean isErlaubt(Geraet pGeraet) {
for(Class<? extends Geraet> clazz : mErlaubt){
if (clazz.isAssignableFrom(pGeraet.getClass())) {
return true;
}
}
return false;
}

关于JAVA将 "unknown"类型的对象转换为另一个对象的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29651181/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com