Generyki - niemożność ustawienia typu klasy wewnętrznej

0

Dlaczego mając coś takiego:

public class TestOuterClass<U> {
    U u;
    public TestOuterClass(U u) {
        this.u = u;
    }

    public class TestInnerClass<T> {
        T t;
        public TestInnerClass(T type) {
            this.t = t;
        }
    }
}

// test code
        TestOuterClass<Object> test= new TestOuterClass("test");
        TestOuterClass.TestInnerClass testInner1 = test.new TestInnerClass("HakunaMaTaTa!!!");
        TestOuterClass.TestInnerClass testInner2 = test.new TestInnerClass(123);

Nie wolno ustawić typu klasy wewnętrznej (<"T">) i przy próbie dostaje się powiadomienie o "Type argument on raw type"? ( na zasadzie ograniczyć typ, bo bez to najbardziej generyczny jak się da, tak? :))? Przeczytałem sobie o raw types w dokumentacji, ale dalej nie łapię, dlaczego nie ma takiej możliwości/potrzeby. Co by było, jakbym miał kilka innych klas wewnętrznych i reprezentowałbym je jeszcze innymi symbolami ( K, M, itepe).

        TestOuterClass.TestInnerClass<String> = test.new TestInnerClass ("HakunaMaTaTa!!!");
0
GregoryI napisał(a):
public class TestInnerClass<T> {
    T t;
    public TestInnerClass(T type) {
        this.t = t;
    }
}

}

A co Ty tu robisz chłopie?
zamiast t nie miał być type?

0
Julian_ napisał(a):
GregoryI napisał(a):
public class TestInnerClass<T> {
    T t;
    public TestInnerClass(T type) {
        this.t = t;
    }
}

}

A co Ty tu robisz chłopie?
zamiast t nie miał być type?

Skoro się już zainteresowałeś to odpowiedz.

0

dodaj sobie static, tzn public static class TestInnerClass<T> i bedzie dzialalo.
poczytaj sobie o roznicach miedzy klasami inner a nested w javie, to powinno wyjasnic czemu tak a nie inaczej.
najogolniej mowiac - jesli klasa jest inner (jak w twoim wypadku) to jest uzalezniona od klasy w ktorej jest zdefiniowana i nie moze istniec oddzielnie

0

@katlex
Po prostu się zastanawiałem, dlaczego nie ma możliwości ustawienia tego jeśli jest w takiej postaci:).
No bo na mój chłopski rozum, ustawiam typ U ( dla klasy zewnętrznej), to i powinienem ustawić typ T dla wewnętrznej, a przynajmniej mieć taką możliwość.
Poczytam o tym co wskazałaś, dzięki.

0

nie zrozum mnie zle, mozesz uzywac parametrow generycznych w klasie wewnetrznej, natomiast nie mozesz tworzyc instancji klasy wewnetrznej poza TestOuterClass (chyba ze jest static), np ponizsze sie normalnie skompiluje

    public class TestOuterClass<U> {
        U u;
        public TestOuterClass(U u) {
            this.u = u;
            TestInnerClass<String> str = new TestInnerClass<String>("");
        }

        public class TestInnerClass<T> {
            T t;
            public TestInnerClass(T type) {
                this.t = t;
            }
        }
    }

1 użytkowników online, w tym zalogowanych: 0, gości: 1