recherche

Maison  >  Questions et réponses  >  le corps du texte

Java:关于Map的引用传递

public class Student {
    private int id;
    private String name;
 
    public Student() {
    }
 
    public Student(int id, String name) {
        this.id = id;
        this.name = name;
    }
 
    public int getId() {
        return id;
    }
 
    public void setId(int id) {
        this.id = id;
    }
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    @Override
    public String toString() {
        return "[" + id + ", " + name + "]";
    }
}
Student one = new Student(1, "Tim");
Student two = new Student(2, "Jack");
 
Map<Integer, Student> map = new HashMap<Integer, Student>();
map.put(one.getId(), one);
map.put(two.getId(), two);
 
Student tmp = map.get(1);
tmp.setName("New"); // {1=[1, New], 2=[2, Jack]}

可以发现我将Map中的某项取出来并进行了修改,那么Map中的相应项也会被修改,所以说是引用传递的,但是有些情况我就是想把这个东西拿出来用并作些修改,但是Map的数据作为原始值是不想被变更的,这种情况下应该怎么办呢?

高洛峰高洛峰2889 Il y a quelques jours559

répondre à tous(4)je répondrai

  • 巴扎黑

    巴扎黑2017-04-18 09:09:29

    Implémentez l'interface Cloneable, remplacez la méthode clone, clonez un nouvel objet et apportez des modifications

    répondre
    0
  • 高洛峰

    高洛峰2017-04-18 09:09:29

    Implémentez l'interface clonable en Java C#, implémentez l'interface IClonable et la méthode de clonage. Appelez cette méthode de clonage pour obtenir un objet avec une référence différente de celle de l'objet d'origine mais avec la même valeur.

    répondre
    0
  • 阿神

    阿神2017-04-18 09:09:29

    Deux méthodes : utilisez des outils ; réécrivez vous-même la méthode de clonage

    Divers outils :

    Spring BeanUtils
    commons-beanutils
    BeanCopier

    Remplacer la méthode de clonage

    Voir CloneDemo.java

    Sous Étudiant :

    @Override
    public Student clone(){
        Student student = new Student(id, name);
        return student;
    }
    

    Utiliser

    Student one = new Student(1, "Tim");
    Student two = new Student(2, "Jack");
    
    Map<Integer, Student> map = new HashMap<Integer, Student>();
    map.put(one.getId(), one);
    map.put(two.getId(), two);
    
    Student tmp = map.get(1);
    Student student2 = tmp.clone();
    student2.setName("New");

    répondre
    0
  • 高洛峰

    高洛峰2017-04-18 09:09:29

    Méthode 1, créez un nouvel objet avec uniquement la méthode get. L'étudiant dans votre question hérite de cet objet et a la méthode set, donc l'objet que vous mettez dans la méthode Map sans set est bien sûr non modifiable

    Méthode 2, gênante, surveillez la méthode définie de Student Si elle est appelée, lancez une exception immédiatement. Comment surveiller, c'est très simple.

    répondre
    0
  • Annulerrépondre