当我将一个元素添加到ArrayList数据结构类时,我需要使用类ReturnObjectImpl来基本上找到错误(这是一个大学分配)。
我不确定如何在ArrayList类中获取函数以返回ReturnObject。我需要一些方法将所有内容传递给ReturnObject,检查是否存在错误(我不知道该怎么做),然后提供错误消息或对象。
public interface ReturnObject {
/**
* Returns whether there has been an error
* @return whether there has been an error
*/
public boolean hasError();
/**
* Returns the error message.
*
* This method must return NO_ERROR if and only if
* {@hasError} returns false.
*
* @return the error message
*/
public ErrorMessage getError(); //Changes the return to a String has in the interface ErrorMessage is throwing an error - if marks are deducted, please discuss with me
/**
* Returns the object wrapped in this ReturnObject, i.e. the
* result of the operation if it was successful, or null if
* there has been an error.
*
* Note that the output of this method must be null if {@see
* hasError} returns true, but the opposite is not true: if
* {@see hasError} returns false, this method may or may not
* return null.
*
* @return the return value from the method or null if there has been an error
*/
public Object getReturnValue();
}
然后是班级本身(目前尚未完成):
public class ReturnObjectImpl implements ReturnObject {
// Constructor for successful operation
ReturnObjectImpl (Object c){
if (!hasError()){
getReturnValue(c);
}
}
// Constructor for error
ReturnObjectImpl (){
if (hasError()){
// getError();
}
}
public boolean hasError() {
//returns true or false depending on if there is an error
return null;
}
public ErrorMessage getError() { //Changes the return to a String has in the interface ErrorMessage is throwing an error - if marks are deducted, please discuss with me
//returns the error message is hasError == true or NO_ERROR if hasError() returns false
return ErrorMessage;
}
public Object getReturnValue() {
// TODO Auto-generated method stub
return null;
}
}
最后是ArrayList类
public class ArrayList implements List{
public static final int CAPACITY=16;
private int size = 0;
private Object[] data;
//constructors
public ArrayList() {
data = new Object[CAPACITY];
} //Constructs arraylist with default capacity
public ArrayList(int capacity) { // Constructs arraylist with given capacity
data = new Object[capacity];
System.out.println("Created an ArrayList of capacity " + capacity);
}
public boolean isEmpty(){
return (size == 0);
}
public int size(){
System.out.println("The ArrayList is not full, but currently has " + size + " indexs");
return size;
}
public ReturnObject get(int index){
return null; //INCOMPLETE
}
public ReturnObject remove(int index){
return null;
}
public ReturnObject add(int index, Object item){
if(index <= size && index < data.length){
for (int x = size-1; x >= index; x--){
data[x+1] = data[x];
size++;
}
data[index] = item;
System.out.println("Added to array at " + index);
}
return null;
}
public ReturnObject add(Object item){
if (data[0] == null){
data[0] = item;
}
//int adding = size + 1;
data[size] = item;
System.out.println("Added item to index " + size);
size++;
return null;
}
//added - but DELETE BEFORE SUBMITTING
public void printAll(){
for(int x = 0; x < data.length; x++){
System.out.println(data[x]);
}
}
}
简而言之,我有两个问题: 1.在returnObjectImpl中,错误检查的功能应该是什么样的 2.更重要的是,我应该如何将公共ReturnObject add(Object item)的结果从ArrayList类发送到ReturnObjectImpl。
答案 0 :(得分:0)
如果List
是java.util.List
界面,那么您在此处有一些严重错误:
列表是一个通用接口,但您的ArrayList
不是通用的。 (如果您为Java 1.4.x编写此代码,那就没关系。但是,Java 1.4.x已于10年前退役了!)
您的ArrayList
方法与java.util.List
API不兼容。例如,add
应该返回boolean
,get
应该返回元素类型(如果忽略泛型则返回Object
)而不是其他类型。
如果不是......那么调用界面List
是一个坏主意。同上ArrayList
。你不应该&#34;借#34;像这样的标准类和接口的名称。它会让你陷入麻烦。
回答你的问题:
1)错误检查的功能在
returnObjectImpl
中应该是什么样的。
没有returnObjectImpl
方法。并且错误检查不属于ReturnObjectImpl
类。该类(根据其名称和API设计)只是一个&#34;持有者&#34;表示值或错误条件。实际错误检查代码属于您的数组列表类;例如有点像这样。
if (/* some error */) {
return new ReturnObjectImpl(/* some error message */);
}
2)更重要的是,我应该如何将
public ReturnObject add(Object item)
从ArrayList
课程的结果发送到ReturnObjectImpl
。
if (/* not an error */) {
return new ReturnObjectImpl(/* the value */);
}
显然,您必须重新设计 ReturnObjectImpl
构造函数才能实现这一目标。
意见:我认为有人可能已经进入&#34;不要使用例外情况&#34; 心理困扰 1 一些已经学习过的人编程(比如说)C或C ++。没有进入关于例外情况是否良好的争论#34;或者&#34;坏&#34;,事实仍然是它们是Java语言不可或缺的一部分,并且它们在整个Java语言和类库中被一致地使用。你无法避免它们,如果你尝试就会伤到自己。
如果这是你的设计,你真的想避免这么多例外......你应该使用不同的编程语言 2 。
1 - 这不是为了贬义,但我担心&#34;避免例外&#34;思考很少(如果有的话)在Java生产力或可维护性方面给出了良好的结果。
2 - 我提醒&#34;真正的程序员可以用任何语言编写FORTRAN&#34; 。