我正在尝试基于条件创建对象,因此对象创建在条件的范围内,但是我需要在该范围之外看到对象。我认为将它添加到地图会起作用,但它没有。请考虑以下示例:
TestModel.java
public class TestModel {
private String text;
public void setText(String text){
this.text = text;}
public String getText(){
return this.text;}
}
ScopeTest.java
import java.util.*;
class ScopeTest {
public static void main(String[] args) {
TestModel testModel;
Map<String, Object> myModel = new HashMap<String, Object>();
for (int i=1; i<2; i++){ // if a certain condition is met, create an object as below
testModel = new TestModel();
testModel.setText("test text");
myModel.put("test", testModel);
}
for (Map.Entry<String, Object> entry : myModel.entrySet()) {
String key = entry.getKey();
Object value = entry.getValue();
System.out.println("key=" + key); // I can see the key value
System.out.println("value.getText()=" + value.getText()); // but can't see testModel object. I am not sure how to resolve.
}
}
}
欢呼声,
Geofrey Rainey。
答案 0 :(得分:2)
您必须使用类转换Object值。像这样。
System.out.println("value.getText()=" + ((TestModel) value).getText());
如果您不想投射物体,那么您可以这样使用。
class ScopeTest {
public static void main(String[] args) {
TestModel testModel;
Map<String, TestModel> myModel = new HashMap<String, TestModel>();//Use TestModel
instead of object
for (int i=1; i<2; i++){
testModel = new TestModel();
testModel.setText("test text");
myModel.put("test", testModel);
}
for (Entry<String, TestModel> entry : myModel.entrySet()) {
String key = entry.getKey();
TestModel value = entry.getValue();
System.out.println("key=" + key);
System.out.println("value.getText()=" + value.getText());
}
}
}
答案 1 :(得分:1)
您应该将Object强制转换为模型。
TestModel value = (TestModel) entry.getValue();
答案 2 :(得分:0)
我认为您可能必须先将HashMap返回的对象转换为TestModel,然后才能使用该类的方法。
答案 3 :(得分:0)
为什么不在地图中使用TestModel
作为通用类型的值,如下所示?
Map<String, TestModel> myModel = new HashMap<>();
// ^^^^^^^^^ - instead of Object
这样您就可以使用
迭代地图for (Map.Entry<String, TestModel> entry : myModel.entrySet()) {
...
}
您将能够在
中存储价值TestModel value = entry.getValue();
无需投射。现在,由于value
引用的类型为TestModel
,编译器将允许您使用getText()
之类的方法而不会出现问题。
System.out.println("value.getText()=" + value.getText());
如果你想迭代一次,我也不确定你为什么要使用循环。简单的if
会更好。另一件事是使用Map
来保持一个元素似乎是不必要的。你可以使用一个像
boolean someCondition = true;
TestModel testModel = null;
if (someCondition) { // if a certain condition is met, create
testModel = new TestModel();
testModel.setText("test text");
}
if (testModel!=null){
System.out.println(testModel.getText());
}