Анонимные классы могут ссылаться на недоступный тип в сигнатуре супертипов?JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Анонимные классы могут ссылаться на недоступный тип в сигнатуре супертипов?

Сообщение Anonymous »

Рассмотрим следующий пункт из JLS 8: § 15.9.5.1. Анонимные конструкторы

Обратите внимание, что подпись анонимного конструктора может ссылаться на недоступный тип (например, если такой тип встречается в сигнатуре). конструктора суперкласса cs). Само по себе это не вызывает каких-либо ошибок ни во время компиляции, ни во время выполнения.

Я попытался создать для этого пример — и получилось вот что:

Код: Выделить всё

.
└── com
└── example
├── inaccessible
│   └── InaccessibleType.java
├── subclass
│   └── SubClass.java
└── superclass
└── SuperClass.java
И код следующий:
-> InaccessibleType.java

Код: Выделить всё

package com.example.inaccessible;
public class InaccessibleType {
public void display() {
System.out.println("InaccessibleType instance");
}
}
-> SuperClass.java

Код: Выделить всё

package com.example.superclass;

// Importing the superclass
import com.example.inaccessible.InaccessibleType;

public class SuperClass {
public SuperClass(InaccessibleType it) {
it.display();
}
}
-> SubClass.java

Код: Выделить всё

package com.example.subclass;

import com.example.superclass.SuperClass;

public class SubClass {
public static void main(String[] args) {
// Creating an anonymous class that extends SuperClass
SuperClass instance = new SuperClass(new InaccessibleType() {
// This anonymous class does not have access to InaccessibleType
}) {
// Anonymous constructor referring to InaccessibleType
// No errors here even though InaccessibleType is inaccessible
};
}
}
Теперь, несмотря на приведенное выше утверждение, данное в JLS, я все еще получаю ошибку компиляции в подклассе

Код: Выделить всё

javac com/example/inaccessible/*.java com/example/subclass/*.java com/example/superclass/*.java                                                                                    ─╯
com/example/subclass/SubClass.java:8: error: cannot find symbol
SuperClass instance = new SuperClass(new InaccessibleType() {
^
symbol:   class InaccessibleType
location: class SubClass
1 error
Теперь уверены, правильно ли я понимаю приведенный выше пункт? - а какой пример может правильно объяснить приведенный выше пункт?


Подробнее здесь: https://stackoverflow.com/questions/791 ... he-superty
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»