Доступ к конструктору класса только из одного класса в другом пакете

178
04 июля 2018, 19:30

Есть 2 отдельных пакета и в каждом по 1му классу (условно 1c и 2c)

Мне нужно сделать так, чтобы в 1с происходило что-то вроде

Class cls = Class.forName(2с.getClass().getName());
Object instance = cls.newInstance();

Для этого нужно, чтобы в 2с был public(!) конструктор без параметров. Но загвоздка в том, что нужно, чтобы экземпляр 2c создавался только в 1c и нигде больше (но если конструктор 2с public, создать экземпляр можно в любом месте приложения)

Как это реализовать?

П.С. в один пакет их положить нельзя и кусок с рефлексией убрать тоже

Answer 1

У вас какая то рефлексия не полная, применив настоящую рефлексию можно вытащить даже приватный конструктор:

  Constructor[] cons = SecondClass.class.getDeclaredConstructors(); 
  cons[0].setAccessible(true); //может выкинуть исключение, если установлен SecurityManager
  SecondClass secondClass = (SecondClass)cons[0].newInstance(); 
Answer 2

Как вариант решения:

public class A {
    private static final A instance = new A();
    private A() {
    }
    public A getInstance(Object o) {
        return o instanceof B ? instance : null;
    }   
}
READ ALSO
Failed with error: Could not read from remote repository

Failed with error: Could not read from remote repository

Не могу запушить проект на гитхабПользуюсь Intelliji Idea

151
Вставка файла из буфера gui

Вставка файла из буфера gui

Подскажите пожалуйста как реализовать возможность вставки скопированного в системный буфер обмена файлаКопирую так:

227
Возвратить предупреждение из jar

Возвратить предупреждение из jar

Имеется jar для вызова, необходимо возвращать из него значение предупрежедниеКак можно получить оттуда такой ответ

176
SimpleDateFormat format разные результаты

SimpleDateFormat format разные результаты

Разное значение при форматировании даты в строку на разных машинах

174