Hi zusammen,
gegeben sei folgendes Interface:
public interface Dynamic<T> {
T get(int i) throws IndexException;
void set(int i, T t) throws IndexException;
}
Nun habe ich eine gegebene Adapter-Klasse, die dieses Interface implementieren soll und dementsprechend ergänzt werden soll:
public class Adapter
{
Object[] f = new Object[0];
}
Meine Lösung:
public class Adapter implements Dynamic<Object>{
Object[] f = new Object[0];
@Override
public Object get(int i) throws IndexException {
if (i<0 || i>f.length)
throw new IndexException();
return f;
}
@Override
public void set(int i, Object t) throws IndexException {
if (i<0)
throw new IndexException();
if (i>f.length-1)
{
Object[] holder = f;
f = new Object[i+1];
for (int j=0; j<holder.length; j++)
{
holder[j] = f[j];
}
set(i,t);
}
else
f = t;
}
}
Meine Frage: Ist es so richtig, dass ich die Klasse wie folgt deklarieren muss?: "public class Adapter implements Dynamic<Object>"
Wieso reicht es nicht einfach zu schreiben: public class Adapter implements Dynamic<T>? Dementsprechend müssten die Methodendeklarationen von Object nach T geändert werden.
Liegt die Begründung darin, dass T auch ein Primitive also klein int, char, etc. sein kann und deshalb nicht unbedingt folgendes gilt: T extends Object. Sprich T könnte ein Primitive sein?
Gruß
gegeben sei folgendes Interface:
public interface Dynamic<T> {
T get(int i) throws IndexException;
void set(int i, T t) throws IndexException;
}
Nun habe ich eine gegebene Adapter-Klasse, die dieses Interface implementieren soll und dementsprechend ergänzt werden soll:
public class Adapter
{
Object[] f = new Object[0];
}
Meine Lösung:
public class Adapter implements Dynamic<Object>{
Object[] f = new Object[0];
@Override
public Object get(int i) throws IndexException {
if (i<0 || i>f.length)
throw new IndexException();
return f;
}
@Override
public void set(int i, Object t) throws IndexException {
if (i<0)
throw new IndexException();
if (i>f.length-1)
{
Object[] holder = f;
f = new Object[i+1];
for (int j=0; j<holder.length; j++)
{
holder[j] = f[j];
}
set(i,t);
}
else
f = t;
}
}
Meine Frage: Ist es so richtig, dass ich die Klasse wie folgt deklarieren muss?: "public class Adapter implements Dynamic<Object>"
Wieso reicht es nicht einfach zu schreiben: public class Adapter implements Dynamic<T>? Dementsprechend müssten die Methodendeklarationen von Object nach T geändert werden.
Liegt die Begründung darin, dass T auch ein Primitive also klein int, char, etc. sein kann und deshalb nicht unbedingt folgendes gilt: T extends Object. Sprich T könnte ein Primitive sein?
Gruß