Przeslanie informacji o typie jako parametru funkcji

0

Chcialbym stworzyc uniwersalna funkcje do ktorej moglbym wpychac roznorakie rzeczy i tam je obrabiac. Do funkcji wrzucilbym Vector obiektow i informacje o tym jaki to typ danych (a moze byc rozny). Jak to zrobic? Probowalem cos tam z Class TypDanych ale chyba niebardzo... zreszta spojrzcie na kod:

public class temper {

	void Tabela (Vector vec, COTUMABYC)
	{
		System.out.println(dane);
		WynikOperacji=(RZUTOWANIE_NA_NIEZNANY_OBIEKT)vec.get(0);
	}
	
	class Typ
	{
		int pole1;
		String napis;
		Typ (int liczba, String str)
		{
			napis=str;
			pole1=liczba;
		}
	}
	
	public static void main(String[] args) 
	{
		Vector xxx;
		Typ A=new Typ(5, "Ciag znakowy");
		Typ B=new Typ(10, "Krotki napis");
		xxx.add(A);
		xxx.add(B);
		Tabela(xxx, COTUMABYC);		
	}
}
0

Moze jeszcze jakies male wyjasnienie. Chodzi o typowe pozne wiazanie:

package testowy;

import java.util.Vector;

//tu jakas przykladowa klasa (nie ma wiekszego znaczenia co ona robi)
public class Typowy extends Object
{
public int pole1;
public String napis;
Typowy (int liczba, String str)
{
napis=str;
pole1=liczba;
}
double getPole ()
{
return (double)pole1;
}
}

public class temper {

static public void Tabela (Vector vec, String TypDanych)
{
System.out.println(TypDanych);
try
{
Class TypD= Class.forName(TypDanych);
//i dalaczego teraz nie moge rzutowac na TypD... przeciez linijke wyzej juz
//stworzylem instancje, mam gotowy TypD i powienienem miec mozliwosc
//tworzenia obiektow tego typu
Typowy X=(TypD)vec.firstElement();
System.out.println("->>"+X.getPole());
}
catch(Exception ex)
{
ex.printStackTrace();
}
}

public static void main(String[] args) 
{
	Vector xxx = new Vector();
	Typowy A = new Typowy(5,"Ciag znakowy");
	Typowy B = new Typowy(10, "Krotki napis");
	xxx.add(A);
	xxx.add(B);
	Tabela(xxx, Typowy.class.getName()); 
}

}

0
import java.util.*;

class Test {

	private static String getClassName(Object p)
	{
		String klasa = p.getClass().toString();
		return klasa.substring(klasa.lastIndexOf(".") + 1);
		
	} 
	
	public static void main(String[] args)
	{
		System.out.println( Test.getClassName("test") );
		System.out.println( Test.getClassName(new Character('w')) );
		System.out.println( Test.getClassName(new Vector()) );
	}
}
0

em1x -> pozne wiazanie:
System.out.println( Test.getClassName("test") );
Oczywiscie drukuje na konsoli tekst String... tylko ze mi chodzi o to jak teraz utworzyc obiekt tekiego samego typu (w tym przypadku bedzie to String, ale w innym niekoniecznie)... W twoim kodzie wiadomo tylko jakiego typu jest zmienna a mi chodzi o utworzenie obiektu/zmiennej typu X ktorego na etapie pisania programu nie znamy (moga byc najrozniejsze, nie tylko standardowe typu int, float, String ale tez inne klasy, rowniez te napisane pozniej o ktorych nie bylo wiadomo ze powstana w momencie pisania tego kodu)

0

z tego co mi wiadomo takie rzeczy sa niemozliwe w javie :/ kompilator musi z gory wiedziec jakiego typu bedzie dany obiekt aby wiedzial ile pamieci przydzielic.. tak samo jest z tablicami.. nie mozna ich tworzyc dynamicznie (nie mylic z Vector'em), musisz znac rozmiar i juz :/

0

hmmmm.... Java sux :] .....

0

ej, cos nie doczytaliście...
Używam czegoś takiego z powodzeniem:

public Object funkcja(Object param){
if( param instanceof Double )
return (Double)param;
else if( param instanceof Float )
return (Float) param;
else if( param instanceof Boolean )
return (Boolean) param;
}

0

I wtedy nie musisz przekazywac do fukcji obiektu + dodatkowo opisu jego typu, przekazujesz tylko sam obiekt, a typ się sam odczyta.

0

Juz to na poczatku przerobilem. Pomysl jest ok. ale do momentu kiedy do funkcji bedziesz wysylal obiekty 2, 3 moze czterech typow... ale jesli masz 400 albo wiecej roznych? To co? Mam wstawic 400 if'ow i zawsze kiedy dojdzie do programu jakis nowy typ to modyfikowac kod!? To rozwiazanie jest oczywiste, ale nie wydajne... To ma byc napisaneraz i juz do tego nie wracac. Mozna zrobic to wlasnie za pomoca poznego wiazania (ale wychodzi na to jest ze w javie niezbyt mozliwe) moglbym sobie rzutowac na typ JAKIKOLWIEK... wtedy to wszystko moznaby zapisac w jedenej linijce. Chodzi o utworzenie instancji/nowego typu danych X (a jaki to typ to tego w momencie pisania kodu nie wiadomo) a potem tworzenie obiektow tego typu lub rzutowanie na taki typ!
Chodzi o cos pokroju (napisalem juz wyzej ale nie wiem czy ma to byc Class.forName, moze tu tkwi problem):

Class TypD= Class.forName(TypDanych);
//i dalaczego teraz nie moge rzutowac na TypD... przeciez linijke wyzej juz 
//stworzylem instancje, mam gotowy TypD i powienienem miec mozliwosc 
//tworzenia obiektow tego typu
Typowy X=(TypD)vec.firstElement();

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