当前位置: 首页 > 知识库问答 >
问题:

Java设置ArrayList中对象的通用值

窦夜洛
2023-03-14

我有课

 public class ValueObject<T> {
        private T value;

        public void setValue(T value){
          this.value = value
        }
    }

在另一个类中,我从第一个类中获得了一个对象数组

ArrayList<ValueObject<?>> valueObjects = new ArrayList<>();
ArrayList<String> valueNames = new ArrayList<>();

现在我想写一个在第二个数组中查找名称的方法,并为该数组中第一个对象的实例分配一个新值

ValueObject<?> get(String name) {
        return valueObjects.get(valueNames.indexOf(name));
}

public <T> void set(String name, T value) {
     get(name).setValue(value);
}

但我没有得到这个工作。我需要写点什么吗?在set()方法中?

谢谢=)

共有1个答案

华英睿
2023-03-14

你没有提供一个完整的例子,所以不确定哪个对你有帮助。

版本1如果你可以使用List

static class Lookup<T2> {

    List<ValueObject<T2>> valueObjects = new ArrayList<>();
    List<String> valueNames = new ArrayList<>();

    ValueObject<T2> get(String name) {
        return valueObjects.get(valueNames.indexOf(name));
    }

    public void set(String name, T2 value) {
        get(name).setValue(value);
    }
}

版本2如果valueObjects确实包含ValueObject以及不同的包含类:

@SuppressWarnings("unchecked")
static class Lookup2 {

    List<ValueObject<?>> valueObjects = new ArrayList<>();
    List<String> valueNames = new ArrayList<>();

    /* unsafe get */
    ValueObject<?> get(String name) {
        return valueObjects.get(valueNames.indexOf(name));
    }


    /* set using unsafe get */
    public <T> void setUnsafe(String name, T value) {
        /* might add handling of runtime exceptions */
        ((ValueObject<T>)get(name)).setValue(value);
    }

    /* safe get when client knows class */
    <T> ValueObject<T> get(String name, Class<T> clazz) {
        /* might do instanceOf check here to throw custom exception */
        return (ValueObject<T>) valueObjects.get(valueNames.indexOf(name));
    }

    /* set using safe get */
    public <T> void set(String name, T value) {
        /* might add handling of runtime exceptions */
        get(name, (Class<T>) value.getClass()).setValue(value);
    }
}

 类似资料:
  • 问题内容: 基于此问题 递增变量名称? 我有一个数组列表“ peopleHolder”,其中包含各种“人”对象。我想基于for循环自动创建“人”对象。我做了以下 我想从人员类中调用方法。例如person.setAge; 如何通过arraylist调用此类方法?我想为每个对象设置值的方法。 问题答案: 如果要在列表中的所有对象上调用某种方法,则需要首先对其进行迭代,然后在每个元素中调用方法。可以说您

  • 问题内容: 我了解hashCode的思想以及为什么需要它。但是我对如何为通用对象计算hashCode感到困惑。所以这是我的问题。如果我有一个String,我可能会使用以下函数来计算hashCode, 但是说我有以下目的, 我的IDE为此生成了一个自动的hashCode函数, 我的问题是,由于键和值是通用的,该怎么办?这种方法如何运作? 问题答案: 和是参数化类型的的对象。 这样,将在实际类型上被调

  • 问题内容: 如果满足条件,我需要从中删除一些对象,我想知道哪种方法会更有效。 情况如下:我有一个包含包含其他一些对象的类。我必须对此进行迭代,并删除满足特定条件的所有元素。据我所知,这些是我要删除的选项: 创建一个新的并添加不符合条件的元素。迭代之后,从旧的数组列表交换到没有元素的新数组列表。 创建一个新的并添加满足条件的元素。迭代后,使用传递要删除对象的方法。 有没有更有效的方法从中删除对象?

  • 问题内容: 我试图通过意图传递对象的ArrayList,但无法使其工作。这是我所拥有的: 在这里收到意向: 我们已经收到了两个int值,correctAnswer和faultAnswers,我可以使用它们。ArrrayList没有通过。endQuiz()方法中没有错误,但’qs = getIntent()。getParcelableArrayListExtra(“ queries”);’ 抛出错误

  • 我想在下面的代码中设置值,我正在使用arraylist如何数据结构,我需要更改int值,它是最后一个值。我在其他类中使用了一个setter来更改这个值,但我尝试用 谢谢..

  • 问题内容: 我有一个具有静态对象ArrayList的ClassA 现在,我要像这样从此列表中删除一个对象 这是用Meteorit类编写的。但是,当我想使用ArrayList中的对象时,它将引发异常。 我使用Iterator从ArrayList中删除对象,但是现在我不知道如何在这种情况下使用它。 问题答案: 这是因为某个线程实际上正在for每个循环中查看此列表,也许您正在尝试在for-each主体中