Re: Trouble with generics
On Fri, 11 May 2007 15:18:51 +0200, Ingo R. Homann wrote:
Hi,
several problems:
Jednostanicni organizam wrote:
// Element.java
public interface Element<T extends Element> {
public T someMethod(T element);
}
// Box.java
public interface Box<E extends Element> {
^^^^^^^
Do you really mean "Element" here, or "Box"?
Or perhaps:
public interface Box extends Element<Box> { ...?
public Box<E> operation(Box<E> box);
}
// BigBox.java
public class BigBox<E extends Element> implements Box<E> {
private final Element[][] data;
Element is generic, so perhaps you mean
Element<Element>[][] data;
Note that Arrays and generics to not work well together. Perhaps you want:
List<List<Element<Element>>> data;
public Box<E> operation(Box<E> box){
// .. some code
Element[][] result = (Element[][])new Object[2][3];
Same here.
// .. some code
// Critical line below. Compiler warning:
// Type safety: The method add(Element)
// belongs to the raw type Element.
// References to generic type Element<T>
// should be parametrized
result[1][1] = (data[1][1].add(data[1][1]));
I get another error (and not a warning). I guess, because you did not
copy&paste your code-snippet. There is no method add.
Anyhow, perhaps, my hints will help you as well.
Ciao,
Ingo
1. I realy ment Element because class that will implement Element will do
public class ElementImpl implements Element<ElementImpl>
so that the method some method can have signature
public ElementImpl someMethod(ElementImpl el) {...}
so I dont have to downcast or check the type in the methods in Element
implementation.
2. If I do Element<Element>[][] data; instead of Element[][] data;
Then when I try to initialize that field in constructor like this
data = (Element<Element>[][])new Object[rowLength][columnLength];
another warning that has not shown before is shown. Warning message: The
cast from Object[][] to Element<Element>[][] is actualy checking against
the erased type Element[][]
The warning from previous post is not shown now.
3. method add is in fact someMethod from Element. That was a copy&paste
error.