2012-06-11 2 views
0

Я развиваю класс для Лица, и у меня есть вопрос или два об этом.Как исправить это предупреждение?

/** 
* ADT for persons which is completed which subclasses 
* to creating actors with specific properties 
*/ 
public class Person { 

    /** 
    * Name of the Person. 
    */ 
    public String name; 

    /** 
    * The World which this Person is associated with. 
    */ 
    public World world; 

    /** 
    * Tells where this Person is at the moment. 
    */ 
    public Place where; 

    /** 
    * The inventory, contains Things. 
    */ 
    public Collection<Thing> inventory; 

    /** 
    * Shows how the Person looks like 
    */ 
    public Image appearance; 

    /** 
    * Create Person named `name' in world `world'. 
    * 
    * @param world The world where the Person is created. 
    * @param name Name of the Person. 
    * @param app An image used to display the Person. 
    */ 
    public Person(World world, String name, Image app) { 
    this.world = world; 
    this.name = name; 
    this.appearance = app; 

    where = world.defaultPlace(); 
    where.enter(this); 

    inventory = Collections.synchronizedCollection(new LinkedList()); 
    } 

...

  1. Если класс Person быть открытым или может по умолчанию доступ будет лучше? Разве это не странно, что человек, частный Человек должен быть общественным, хотя значения здесь не совсем одинаковы.

  2. Как я должен обращаться с аркой, когда моя IDE предупреждает о inventory = Collections.synchronizedCollection(new LinkedList());? Он предупреждает о безопасности моего типа.

Спасибо

ответ

4
  1. Если лицо будет использоваться только в одном пакете, вы можете сделать его по умолчанию. Иначе public имеет смысл.

  2. Попробуйте дать общий тип.

    List<Person> people = Collections.synchronizedList(new LinkedList<Person>()); 
    

КСТАТИ: Большинство Иды будет иметь автоматическое/быстрое решение для любой из этих проблем.

2

Для предупреждения, необходимо указать тип элементов для LinkedList:

inventory = Collections.synchronizedCollection(new LinkedList<Thing>()); 

Что касается private/public для Person: если классPerson отмечен public, это означает, что другой код (otside своего пакета) может ссылаться/использовать его по мере необходимости. Когда вы объявляете переменную-член типа Person как private, это означает, что другой код не может получить доступ к переменной-члену напрямую. Эти два не влияют друг на друга