Возможно ли сохранить ссылку на класс? - Форум администраторов игровых серверов
Форум администраторов игровых серверов StormWall - Защита от DDos атак
Регистрация Мнения Справка Сообщество Календарь
Вернуться   Форум администраторов игровых серверов > Полезное / Common > Программирование / Programming > Java

Java В данном форуме вы сможете найти много полезной информации по платформе Java. Подробные статьи, исходные коды и конечно учебники как для новичков так и профессиональных Java разработчиков вы найдёте здесь. Если у вас есть вопрос или хотите поделится своими наработками, пожалуйста, делайте это в этой теме.

Ответ
Опции темы
Непрочитано 31.05.2017, 14:36   #1
Пользователь

Автор темы (Топик Стартер) Возможно ли сохранить ссылку на класс?

Есть класс SomeClass который реализовывает интерфейс SomeInterface

Код:
public interface SomeInterface
{
	public void onAction();
}


public class SomeClass implements SomeInterface
{
	@Override
	public void onAction()
	{
		//code
	}
}
Есть массив который хранит список объектов, чтобы в нужный момент можно их было перебрать и вызвать в каждом метод onAction().
Код:
List<SomeInterface> siList;

Все понятно если создается экземпляр класса SomeClass.
Код:
SomeClass sc = new SomeClass();
siList.add(sc);

А что если SomeClass будет использоваться как статический класс, без создания экземпляра. Возможно ли в таком случае сохранить список классов реализовывающих интерфейс SomeInterface для перебора?
flopix вне форума Ответить с цитированием
Непрочитано 31.05.2017, 17:47   #2
-

По умолчанию Re: Возможно ли сохранить ссылку на класс?

Нет такого понятия как "статический класс".
Есть паттерн "одиночка".
Пример же простой, почему бы не проверить самому?

Код:
PHP код:
package com.company;

import java.util.ArrayList;
import java.util.List;

public class 
Main {

    public static 
void main(String[] args) {
        List<
Basicbasics = new ArrayList<>();
        
basics.add(new ChildBasic("I'm child and i'm not alone!"));
        
basics.add(new ChildBasic("Pew pew, hello, my name is ChildBasic"));
//        basics.add(new ForeverAloneBasic()); нельзя так сделать, ибо конструктор приватный
        
basics.add(ForeverAloneBasic.getInstance());
        
basics.add(ForeverAloneBasic.getInstance());
        
basics.add(new ChildBasic("Another child!"));

        
System.out.println("1st run...");

        for (
Basic basic basics) {
            
basic.doAction();
        }

        
ForeverAloneBasic.getInstance().setMessage("LEAVE ME FFS");

        
System.out.println("\n2nd run...");

        for (
Basic basic basics) {
            
basic.doAction();
        }
    }
}

interface 
Basic {
    
void doAction();
}

class 
ChildBasic implements Basic {

    private 
String message;

    public 
ChildBasic(String message) {
        
this.message message;
    }

    @
Override
    
public void doAction() {
        
System.out.println(this.getClass().getName() + " " message);
    }

}

class 
ForeverAloneBasic implements Basic {
    private 
String message "I'm forever alone, leave me.";

    private static 
ForeverAloneBasic instance = new ForeverAloneBasic();
    public static 
ForeverAloneBasic getInstance() {
        return 
instance;
    }

    private 
ForeverAloneBasic() {
        
// запрещаем создание экземпляра
    
}

    public 
void setMessage(String message) {
        
this.message message;
    }

    @
Override
    
public void doAction() {
        
System.out.println(this.getClass().getName() + " " message);
    }

Вывод:

PHP код:
1st run...
com.company.ChildBasic I'm child and i'm not alone!
com.company.ChildBasic Pew pewhellomy name is ChildBasic
com
.company.ForeverAloneBasic I'm forever alone, leave me.
com.company.ForeverAloneBasic I'
m forever aloneleave me.
com.company.ChildBasic Another child!

2nd run...
com.company.ChildBasic I'm child and i'm not alone!
com.company.ChildBasic Pew pewhellomy name is ChildBasic
com
.company.ForeverAloneBasic LEAVE ME FFS
com
.company.ForeverAloneBasic LEAVE ME FFS
com
.company.ChildBasic Another child
shegan вне форума Ответить с цитированием
Непрочитано 31.05.2017, 18:08   #3
Пользователь

Автор темы (Топик Стартер) Re: Возможно ли сохранить ссылку на класс?

В вашем примере в обоих классах создаются их экземпляры с помощью оператора new.
В моем случае экземпляр класса создаваться не будет.
flopix вне форума Ответить с цитированием
Непрочитано 31.05.2017, 18:17   #4
-

По умолчанию Re: Возможно ли сохранить ссылку на класс?

Я могу, конечно, написать решение, но оно того не стоит.
Что за задача такая, где понадобился такой странный подход?
shegan вне форума Ответить с цитированием
Непрочитано 31.05.2017, 18:46   #5
Пользователь

Автор темы (Топик Стартер) Re: Возможно ли сохранить ссылку на класс?

Да решил допилить в старой Ц4 сборке более гибкую поддержку скриптов для эвентов.
Я уже сделал с созданием экземпляров каждого класса. Но потом подумал а зачем создавать экземпляры если он используется только в одном месте. Вот стало интересно как реализовать.
flopix вне форума Ответить с цитированием
Непрочитано 31.05.2017, 20:33   #6
-

По умолчанию Re: Возможно ли сохранить ссылку на класс?

В таком случае создавайте объект по имени класса, и вызывайте соответствующий метод.
Т.е. руками не надо будет писать new, достаточно указать имена классов в конфиге, или ещё где-то.
shegan вне форума Ответить с цитированием
Непрочитано 31.05.2017, 23:02   #7
Пользователь

Автор темы (Топик Стартер) Re: Возможно ли сохранить ссылку на класс?

Да мне не сложно добавить new. Тут вопрос чисто спортивного интереса.
flopix вне форума Ответить с цитированием
Непрочитано 02.06.2017, 07:20   #8
Аватар для FaintSmile
Пользователь

По умолчанию Re: Возможно ли сохранить ссылку на класс?

почитайте про рефлекшоны
FaintSmile вне форума Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выпадающий текст при нажатии на ссылку ArtStyle Движки сайтов (CMS) 8 09.09.2015 21:48
Открыть WEB ссылку из клиента, возможно? flopix Игровой клиент 6 19.01.2015 18:46
Дайте ссылку BlackPR Курилка / Yak floor 8 27.05.2012 01:38
Как изменить ссылку? dbnfkbr33 Lineage II 4 31.01.2012 10:40
Как сохранить sadrin Aion 4 28.06.2010 23:58


© 2007–2024 «Форум администраторов игровых серверов»
Защита сайта от DDoS атак — StormWall
Работает на Булке неизвестной версии с переводом от zCarot
Текущее время: 08:50. Часовой пояс GMT +3.

Вверх