所以我有这个对象数组,我想初始化它,所以当我使用对象访问器函数时,当用户没有输入足够的数据来填充数组的每个元素时,它不会抛出nullpointerexceptions。
这是代码,我正在讨论的数组是planetArray:
import java.util.*;
public class SolarSystem{
public static final int PLANET_MAX = 10;
public int planetCount = 0;
Planet[] planetArray = new Planet[PLANET_MAX];
String systemName;
public SolarSystem(String name){
this.systemName = name;
}
}
public void addPlanet(String planetName, double planetMass, double planetDistance){
double mass = Math.round(planetMass*1000)/1000.0;
double distance = Math.round(planetDistance*1000)/1000.0;
Planet newPlanet = new Planet(planetName, mass, distance);
newPlanet.calculatePeriod(planetDistance);
planetArray[planetCount] = newPlanet;
planetCount++;
}
public String toString(){
String myString = systemName + "\n";
for(int i = 0; i < PLANET_MAX; i++){
String name = planetArray[i].getPlanetName();
double mass = planetArray[i].getPlanetMass();
double distance = planetArray[i].getPlanetDistance();
double period = planetArray[i].getPlanetPeriod();
if(period <= 1){
period = period * 365.25;
period = Math.round(period*1000)/1000.0;
myString = myString + "Planet " + name + " has a mass of " + mass + " Earths, is " + distance + "AU from its star, and orbits in " + period + " days\n";
}
else{
period = Math.round(period*1000)/1000.0;
myString = myString + "Planet " + name + " has a mass of " + mass + " Earths, is " + distance + "AU from its star, and orbits in " + period + " years\n";
}
}
return myString;
}
//accessors
public Planet[] planetArray(){
return planetArray;
}
public String getSystemName(){
return systemName;
}
//mutators
public void setPlanetArray(Planet[] planetArray){
this.planetArray = planetArray;
}
public void setSystemName(String systemName){
this.systemName = systemName;
}
}
如果我使用for循环尝试循环遍历数组以使用mutator函数来设置对象的值,我会返回nullpointerexceptions。如果数组没有完全填充,我会得到nullpointerexceptions。用户能够将数据输入到阵列中,直到他们决定完成为止,这是一个很大的要求。如何将整个数组设置为不会抛出这些异常的值?
编辑:一个例子是:
public SolarSystem(String name){
this.systemName = name;
for(int i = 0; i < PLANET_MAX; i++)
planetArray[i].setPlanetName("/0");
}
}
我希望能够将行星名称设置为null,但尝试执行任何操作只会获得nullpointerexceptions。
答案 0 :(得分:0)
这是一回事。你
for(int i = 0; i < PLANET_MAX; i++) {
if(planetArray[i]==null)
continue;
planetArray[i].setPlanetName("/0");
}
另一个评论员是对的,列表对于这类事情来说更方便。
答案 1 :(得分:0)
从风格,共同实践的观点来看,你真的不想做你的建议。也就是说,实际上没有人插入非零虚拟对象或值来表示“尚未设置”&#39;或者未提供&#39;。
使用 java null 几乎完全意味着&#39; unset&#39;,&#39;未提供&#39;或者&#39;不适合这种用途。发明一种新机制会使代码的意图变得混乱,如果其他人使用您的代码,可能会造成严重破坏。
虽然一直检查空值似乎很难,但Java最佳实践要求:
如果obj不为null,则它是一个有效的obj,可以在您的cacluation,operation,view,use queries等中使用和合并。
您清理来自用户,上传,CGI参数以及您无法控制的任何内容的任何输入。任何无效或缺失的值都将变为null,以免干扰您的其他程序。
如果从控制范围以外的组件调用了params和值为null,或者没有经过彻底的检查或检查,那么甚至是一个好主意。
这些实践可以显着提高代码的安全性,可靠性和使用寿命。对于详细的答案&#39;抱歉。