forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Основной форум (http://forum.boolean.name/forumdisplay.php?f=49)
-   -   Как создать переменную без типа? (http://forum.boolean.name/showthread.php?t=7952)

DeMoNN 09.03.2009 19:41

Как создать переменную без типа?
 
сабж
Как ее создать и присвоить ей значение любого типа/класса
аналог типа variant из делфи
Возможно ли это?
Если нет, то как это реальзавать на яве?

ViNT 09.03.2009 20:02

Ответ: Как создать переменную без типа?
 
В MP это точно невозможно, в java, на сколько я знаю, тоже.

Phantom 09.03.2009 20:45

Ответ: Как создать переменную без типа?
 
Я пробовал в вектор совать разные типы. Получилось. Можно засунуть в ячейки одного вектора разные типы. Но чтобы потом извлечь, нужно написать в скобочках круглых тип извлекаемых данных, иначе просто напросто не скомпилируется. То есть ты всё равно должен будешь наперёд знать какой тип данных хранится в данной ячейке.

jimon 09.03.2009 21:10

Ответ: Как создать переменную без типа?
 
по-идее должен быть указатель без типа, но указатель только указывает на обьект, обьект без типа не может быть

Phantom_wc
ты работал с указателями наверно

Phantom 09.03.2009 21:22

Ответ: Как создать переменную без типа?
 
jimon, если честно, то я вообще не слышал, что в java есть указатели. Если есть, то вполне возможно, что в векторе они и используются. Я не смотрел как он устроен. Может в Java вообще все операции происходят с указателями? О_о Ждём Пилигрима, он всех рассудит =)

jimon 09.03.2009 21:38

Ответ: Как создать переменную без типа?
 
Phantom_wc
в паскале точно есть указатели (насчёт midletpascal не знаю)

ViNT 09.03.2009 22:33

Ответ: Как создать переменную без типа?
 
Цитата:

Сообщение от jimon (Сообщение 100095)
Phantom_wc
в паскале точно есть указатели (насчёт midletpascal не знаю)

В паскале есть, но в MP нет и сотой доли того, что есть в паскале.
В MP указателей нет, поскольку их нет в j2me(может быть нечто подобное существует на уровне JVM, но в языке указатели не реализованы).

Piligrim 10.03.2009 00:35

Ответ: Как создать переменную без типа?
 
Все переменные-объекты суть указатели. Просто неявные. В яве все что не static, создается в куче, делайте выводы.
В векторе необязательно знать какой тип хранится в ячейке, достаточно знать возможные варианты и проверять с помощью instanceof

Phantom 10.03.2009 00:51

Ответ: Как создать переменную без типа?
 
instanceof - это метод вектора чтоли? Не слышал о таком.
Добавил позже:
Нашёл в интернете пример. Это вроде как оператор что ли?
PHP код:

if(str instanceof String){ ... } 

Как я понял, если str является String, то условие будет TRUE?
Очень интересная вещь. Java продолжает меня удивлять и нравится мне всё больше и больше =)

odd 10.03.2009 02:20

Ответ: Как создать переменную без типа?
 
В java есть способы записи в переменную разные типы данных. Там есть класс под названием Object и от этого класса все типы данных наследут свои свойства. Так что если объявить пременную или массив переменных типа Object, то туда можо записывать информацию любых типов. Класс Vector - это типа расширяемый массив элементов типа Object, так что в векторе можно хранить абсолютно любую информацию.

gost6681 10.03.2009 12:56

Ответ: Как создать переменную без типа?
 
вот что нашел в стандартном факе, может быть это подойдет?:

Данная особенность языка позволяет создавать собственные типы данных, являющиеся совокупностью других типов. Например, если вы пишете игру, где игрок управляет персонажем на экране, вы вполне можете использовать комбинированный тип для описания позиции, здоровья и прочих параметров персонажа:

type heroType = record
positionX, positionY: integer;
health: integer;
end;

Чтобы создать переменную свежезаданного типа, используйте обычную формулировку в секции 'var':

var hero: heroType;

Также вы можете использовать созданный тип в качестве параметра, при описании процедур и функций:

function isHeroDead(hero: heroType): boolean;
begin
if (hero.health <= 0) then
isHeroDead := true;
else
isHeroDead := false;
end;

Новый тип может быть определен непосредственно в секции 'var':

var hero: record
positionX, positionY: integer;
health: integer;
end;

Чтобы получить доступ к отдельным элементам комбинированного типа, используйте оператор "." (точка):

...
{ передвигаем персонажа вправо }
hero.positionX := hero.positionX + 1;
...

Нельзя копировать впрямую из переменной в переменную данного типа:

var
a, b: record
x: integer;
end;
begin
...
a := b; { это - неправильно }
...
a.x := b.x; { нужно копировать каждый элемент комбинированного типа }
end.

gost6681 10.03.2009 12:59

Ответ: Как создать переменную без типа?
 
И если это правльно, то обьясните мне что это за тип? И пример если можно, а то я не понял.

SBJoker 10.03.2009 13:50

Ответ: Как создать переменную без типа?
 
я не перечитывал всё, поэтому мож не в теме, но во многих языках есть базовый тип переменных.

Например: object в С# и BlitzMAX, Variant в Delphy и Visual Basic...
Переменная этого базового типа может хранить в себе значение любого типа данных (по сути это ссылка на оригинальный объект определённого типа).

Однако перед использованием данные из этой переменной надо извлечь... с помощью каста или спец функции или метода класса.

Piligrim 10.03.2009 16:05

Ответ: Как создать переменную без типа?
 
То что описал gost6681 преобразуется в классы без методов, только с полями.


Часовой пояс GMT +4, время: 10:53.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot