casting

Casting ist ein Prozess, bei dem ein Objekttyp explizit in einen anderen Typ konvertiert wird, wenn die Konvertierung zulässig ist. Dieser Prozess könnte zu einer Wertänderung führen.
4
Antworten

Ganzzahlige Mathematik in c #

Ich habe ein Menü mit Produktmarken, die ich in 4 Spalten aufteilen möchte. Also, wenn ich 39 Marken habe, dann möchte ich die maximale Stückzahl für jede Spalte 10 (mit einer einzelnen Lücke in der letzten Spalte. So berechne ich die Artikelanz...
30.10.2008, 13:35
6
Antworten

Wie viel Prozess- und Speicherverbrauch nimmt das Casting in Java?

Ich überlege, ob es besser ist, zwei Zeiger zu haben, einen für jede Objekt-Unterklasse und super, oder ob ich nur Casting verwenden soll. Wieviel Systemressourcen verwendet dies: %Vor% Ist es besser als: %Vor% Grundsätzlich geht es b...
19.10.2010, 13:35
6
Antworten

Vermeiden von dynamic_cast / RTTI

Ich habe kürzlich an einem Stück C ++ - Code für ein Nebenprojekt gearbeitet (die cpp-markdown -Bibliothek , z der Neugierige) und stieß auf eine Coding-Frage, über die ich gerne ein paar Meinungen hätte. cpp-markdown hat eine Basiskla...
24.02.2009, 02:47
6
Antworten

Umwandeln / Konvertieren von IEnumerableT in IEnumerableU?

Der folgende Befehl erfüllt jedoch zur Laufzeit eine Ausnahme. Was ich versuche zu tun, ist eine Klasse PersonWithAge in eine Klasse von Person zu werfen. Wie mache ich das und worum geht es bei der Arbeit? %Vor% BEARBEITEN: Übrigens wird...
21.11.2009, 16:45
4
Antworten

Angular 2 cast Wählen Sie den Wert in int

Ich habe ein Formular mit verschiedenen Auswahlmöglichkeiten wie: %Vor% Mein Backend erwartet einen int im Attribut "isConnected". Leider, sobald ich den Wert der Auswahl ändern, wird das Attribut in eine Zeichenfolge umgewandelt: %Vor%...
13.09.2016, 15:48
6
Antworten

Wie konvertiert man char * in C ++ in einen unsigned short

Ich habe eine char* name , die eine String-Repräsentation der Kurzform ist, die ich möchte, wie zB "15", und diese als unsigned short unitId in eine Binärdatei ausgeben muss. Diese Besetzung muss auch plattformübergreifend kompatibel sein....
23.06.2010, 15:18
1
Antwort

___ tag123casting ___ Casting ist ein Prozess, bei dem ein Objekttyp explizit in einen anderen Typ konvertiert wird, wenn die Konvertierung zulässig ist. Dieser Prozess könnte zu einer Wertänderung führen. ___ tag123compoundoperator ___ In C-ähnlichen Sprachen kann "x = x + y" als "x + = y" codiert werden. Dies ist ein zusammengesetzter Operator. Es gibt einen solchen Operator für jeden arithmetischen, logischen und bitweisen Operator. ___ answer6844948 ___

Weil %code% äquivalent zu %code% ist, während %code% standardmäßig auf %code% operation ist, weisen Sie ein int zu, das char umgewandelt werden muss.

Aus der %code% ,

  

Ein zusammengesetzter Zuordnungsausdruck der Form E1 op = E2 ist äquivalent   zu E1 = (T) ((E1) op (E2)), wobei T der Typ von E1 ist, außer dass E1   wird nur einmal ausgewertet. Beachten Sie, dass die implizierte Umwandlung für Typ T sein kann   entweder eine Identitätskonvertierung (? .1.1) oder ein sich verengendes Primitiv   Umwandlung (? .1.3).

    
___ qstntxt ___

Frage:

%Vor%     
Was ist der Unterschied von x = x + 3 und x + = 3? Warum braucht man Typcast und der andere nicht? ___

Frage: %Vor%      Was ist der Unterschied von x = x + 3 und x + = 3? Warum braucht man Typcast und der andere nicht?
27.07.2011, 13:15
10
Antworten

___ answer1863513 ___

Die Antwort lautet einfach: "Wirf dich nicht in deinem Agent-Code an GameState!".

Alternativ kannst du das GameState-Material als privat deklarieren. Oder wenn Sie von einigen wenigen anderen Klassen darauf zugreifen müssen, deklarieren Sie es als paketgeschützt.

    
___ qstntxt ___

Ich habe den Code eines einfachen Spiels, in dem ein AgentInterface implementiert werden muss, um einen Agenten-Controller für einen der Charaktere im Spiel zu erstellen. GameState ist eine Klasse, die das GameStateInterface implementiert, und ein Objekt, das diese Schnittstelle implementiert, kann an den Agenten übergeben werden, sodass der Agent die Daten aus dem Spielzustand lesen und analysieren kann und der Agent die entsprechende Aktion (als int zurückgegeben) zurückgeben muss der Charakter sollte nehmen.

Dies ist das AgentInterface, das Agents implementieren müssen:

%Vor%

Ausführen des Spiels mit einem Agenten namens MyAgent:

%Vor%

Aber es gibt einige Informationen in GameState, auf die der Agent NICHT zugreifen darf, da dies den Controller betrügen würde. Eine Cast-Konvertierung von GameStateInterface in GameState würde es dem Agenten jedoch ermöglichen, auf Informationen zuzugreifen, die nicht im GameStateInterface definiert sind:

%Vor%

Meine Frage wäre, ist es möglich, eine Cast-Conversion zu blockieren? Ich weiß, dass Polymorphie eines der Hauptmerkmale von Java und objektorientierten Programmiersprachen ist, aber in solchen Fällen möchte ich Umwandlungen vermeiden.

Ich weiß, dass dies auf viele andere Arten gelöst werden kann, aber ich war neugierig zu wissen, ob es möglich ist, dies zu tun.

Vielen Dank im Voraus.

    
___ answer1863512 ___

Es ist nicht möglich, einen Cast zu blockieren. Sie können Ihren Spielstatus jedoch so definieren, dass er nur von einem bestimmten Ort aus erstellt werden kann. Eine Sache, die Ihnen in den Sinn kommt, wäre eine private innere Klasse, die die Schnittstelle implementiert, oder eine Factory, die eine private innere Klasseninstanz zurückgibt

    
___ answer1863510 ___

Soweit ich weiß, ist es nicht möglich, eine Typumwandlung abzufangen und zu leugnen (z. B. durch eine ClassCastException).

Aber anstatt zu versuchen, das Typecase zu leugnen, kannst du einfach das Proxymuster verwenden, um den Zugriff auf den eigentlichen GameState zu kontrollieren Objekt. Implementiere einfach eine Proxy-Klasse, die nur das GameStateInterface implementiert und es alle Methodenaufrufe an das GameState-Objekt weiterleiten lässt. Anstatt den tatsächlichen GameState-Objektverweis an die Aktionsmethode zu übergeben, übergeben Sie ihn nun von einer Instanz Ihrer Proxyklasse umschlossen.

    
___ answer1863519 ___

Wenn Sie Bedenken haben, dass der Spielstatus von einem Agenten geändert wird, erstellen Sie eine Bean-Kopie des Status und übergeben Sie diese an den Agenten und nicht an das echte GameState-Objekt.

Es ist nicht möglich, einen Cast zu verbieten (es ist wahrscheinlich eine nicht sperrbare JVM-Sprachspezifikation), oder ich habe noch nie davon gehört.

    
___ answer1863520 ___

Im Allgemeinen können Sie nicht verhindern, dass ein Objekt in Java umgewandelt wird. Der Code, der einen Verweis auf Ihre %code% erhält, kann eine nicht private, nicht geschützte Methode für dieses Objekt aufrufen. Selbst wenn Sie Casting verhindern könnten, könnte es immer noch Reflexion verwenden.

Wenn der %code% -Code unter Ihrer Kontrolle steht, halten Sie die Dinge einfach und werfen Sie sie nicht um. Wenn andere %code% -Klassen schreiben, könnten Sie eine Proxy-Klasse erstellen, die ein GameState-Objekt übernimmt und nur die Methoden von GameStateInterface implementiert.

%Vor%

Dann könnten Sie einen Proxy erstellen und es so übergeben:

%Vor%

Der Code, der ein %code% erhält, hätte nur Zugriff auf die Methoden in %code% .

    
___ answer5108831 ___

Ich habe ein gesichertes schreibgeschütztes Objekt implementiert. Wenn Sie eine schreibgeschützte Schnittstelle (keine Setter) erstellen, können Sie immer noch Methoden des reinen Objekts typisieren und darauf zugreifen. ZB Interface haben nur ein get und das Kind dieses Interface hat das Set. Wenn Sie das Objekt an die Schnittstelle übergeben, haben Sie nur den get. ABER Sie können immer noch dieses Objekt typisieren und auf alles zugreifen: (

Um dies zu vermeiden, können Sie eine Zusammensetzung erstellen, die NUR dem Ersteller der Klasse gehört. Hier ist ein Beispiel:

%Vor%

Auf diese Weise geben Sie Folgendes ein:

%Vor%

Er hat also Zugriff auf das Item-Objekt (die innere Klasse kann auf private Methoden zugreifen :)) Wenn Sie nur lesenden Zugriff auf dieses Objekt haben wollen:

%Vor%

Nun ist es absolut NICHT möglich, zu tippen, weil sie nicht vom selben Typ sind!

Hoffe, das kann jemandem helfen! (Ich würde gerne, wenn Sie Quelle nennen: P)

    
___ answer1863560 ___

Was wir tun, ist ein Jar mit "Stubs", gegen den Sie kompilieren können, aber es enthält keine Implementierung. Wenn das tatsächliche Produkt ausgeführt wird, ersetzen wir die Stubs durch ein echtes Glas.

Aber in unserem Fall kontrollieren wir, wo es läuft.

Auch in unserem Fall machen wir genau das, was Sie verlangen. Jede Klasse muss (zur Laufzeit) Zugriff auf andere Klassen anfordern. Ich glaube, das ist alles eine benutzerdefinierte Implementierung und ich bin mir nicht sicher, ob es auf einer JVM läuft.

Sie können versuchen, den Quellcode für das Zeug, an dem ich gerade arbeite, zu finden / anzufordern. Es gibt eine Referenzimplementierung, wenn Sie angeben, dass Sie an der Entwicklung von Kabelboxen interessiert sind, die Sie möglicherweise erhalten können. Es heißt die "tru2way" oder "OCAP" Referenz-Stack-Implementierung und ich denke, das Projekt ist irgendwo auf der Java-Site verfügbar. Könnte ein bisschen googlen - und ich bin mir ziemlich sicher, dass Sie alles in einem speziellen Klassenlader oder SecurityManager finden.

EDIT: Ich denke, ich könnte falsch liegen. Wir erstellen "Berechtigungen" mit dem Sicherheitsmanager basierend auf dem Namen der Klasse, auf die zugegriffen wird. Wenn ein Thread versucht, eine Methode für die Klasse aufzurufen, testen wir zuerst seine Berechtigungen (wir schreiben den Code innerhalb der Klasse "protected") und wenn der aktuelle Thread nicht über die Berechtigung verfügt, die durch den Namen der Klasse identifiziert wird, löst er ein Ausnahme.

Gleicher Effekt wie später, aber langsamer und ausführlicher. Aber dann müssen wir verhindern, dass Kinder pr0n anschauen.

Bearbeiten 2: (Entschuldigung !!)

Wenn ich auf solche Berechtigungsbeschreibungen schaue, glaube ich, dass es zumindest teilweise möglich ist:

Dadurch wird Codeberechtigung für die Abfrage einer Klasse für ihre öffentlichen, geschützten, standardmäßigen (Paket-) Zugriffs- und privaten Felder und / oder Methoden erteilt. Obwohl der Code Zugriff auf die privaten und geschützten Feld- und Methodennamen hätte, hätte er keinen Zugriff auf die Daten des privaten / geschützten Felds und könnte keine privaten Methoden aufrufen. Dennoch kann bösartiger Code diese Informationen verwenden, um einen Angriff besser zu zielen. Darüber hinaus kann es beliebige öffentliche Methoden aufrufen und / oder auf öffentliche Felder in der Klasse zugreifen. Dies könnte gefährlich sein, wenn der Code normalerweise nicht in der Lage wäre, diese Methoden aufzurufen und / oder auf die Felder zuzugreifen, da er das Objekt nicht mit diesen Methoden und Feldern an die Klasse / Schnittstelle übergeben kann.

Sonst könnten Applets daran gehindert werden, beliebige JVM-Klassen zu instanziieren und darauf zuzugreifen? Es ist möglich, dass die "Gefährlichen" Pfade auf die gleiche Art und Weise blockiert werden, wie wir unsere Sachen blockieren - indem wir die Berechtigungen jedes Mal lesen, wenn sie aufgerufen werden - aber das obige Zitat lässt den Eindruck entstehen, dass mehr verfügbar ist und die meisten Klassen komplett blockiert sind Standard.

Das hat mich eine Weile interessiert, aber ich habe mich nie wirklich darum gekümmert.

    
___ answer1863505 ___

Nein, es gibt keine Möglichkeit, dies zu tun.

Beste Wünsche,
Fabian

    
___ answer1863687 ___

Man kann nur auf einen zugänglichen Typ umwandeln. Indem Sie GameState privat, paketgeschützt oder geschützt machen, können Sie einschränken, wer darauf casten darf.

Wenn Sie nicht vertrauenswürdigen Code ausführen, müssen Sie einen Sicherheitsmanager installieren, da die Reflektion dazu verwendet werden kann, Zugriffsmodifizierer in der Datei absensce zu umgehen (siehe Feld.setAccessible )

    
___ tag123java ___ Java (nicht zu verwechseln mit JavaScript oder JScript oder JS) ist eine universelle objektorientierte Programmiersprache, die für die Verwendung in Verbindung mit der Java Virtual Machine (JVM) entwickelt wurde. "Java-Plattform" ist der Name für ein Computersystem, auf dem Tools zum Entwickeln und Ausführen von Java-Programmen installiert sind. Verwenden Sie dieses Tag für Fragen, die sich auf die Java-Programmiersprache oder Java-Plattform-Tools beziehen. ___ tag123casting ___ Casting ist ein Prozess, bei dem ein Objekttyp explizit in einen anderen Typ konvertiert wird, wenn die Konvertierung zulässig ist. Dieser Prozess könnte zu einer Wertänderung führen. ___ answer1863507 ___

Ich weiß nicht, ob das, was Sie beschreiben, in Java möglich ist. In anderen Sprachen können Sie typecast-Operatoren überlasten und sie eine Exception oder etwas auslösen lassen, aber das ist in Java nicht möglich. Ihre beste Wette ist wahrscheinlich, es auf eine der "vielen anderen Arten" zu tun, über die Sie gesprochen haben.

    
___

Ich habe den Code eines einfachen Spiels, in dem ein AgentInterface implementiert werden muss, um einen Agenten-Controller für einen der Charaktere im Spiel zu erstellen. GameState ist eine Klasse, die das GameStateInterface implementiert, und e...
07.12.2009, 22:50
3
Antworten

Schnellste Möglichkeit, int int int in UInt32 zu konvertieren?

Ich habe einige Low-Level-Bild / Textur-Operationen, wo 32-Bit-Farben als UInt32 oder int gespeichert werden und ich brauche eine wirklich schnelle bitweise Konvertierung zwischen den beiden. z.B. %Vor% irgendwelche Ideen? Danke und Gr...
30.08.2010, 13:41
3
Antworten

Casting Eval ("bitValue") als Bool

Ich habe eine Listenansicht mit einem HyperLink-Steuerelement innerhalb der ItemTemplate. Ich möchte den Link anzeigen, wenn ein zurückgegebener Wert 0 (falsch) ist, und den Link nicht anzeigen, wenn es 1 (wahr) ist. Bisher habe ich das: %V...
11.08.2010, 17:38