Typlose Erstellung von Records #339

Closed
opened 2024-07-17 15:09:34 +00:00 by RubenKraft · 1 comment
Collaborator

Im Rahmen meiner Arbeit mit Pattern-Matching spielen unter anderem auch Records eine Rolle. Dabei ist mir aufgefallen, dass die Deklaration der Records mit Typen erfolgt, zum Beispiel:
public record Rec(Integer a, Integer b) {}

Es könnte jedoch Anwendungsfälle geben, in denen eine typlose Definition der Records sinnvoll wäre. Dies könnte dann so aussehen:
public record Rec(a, b) {}

Versucht man dies derzeit, erhält man folgenden Fehler:
java.lang.ClassFormatError: Field "a" in class <Unknown> has illegal signature "TJ;"

Ich kenne mich zu wenig mit der Verwendung von Records aus, um zu beurteilen, ob es sinnvoll ist, Records ohne Typen zu definieren oder ob dieser Anwendungsfall überhaupt relevant ist, es macht denke ich aber dennoch sinn das zu evaluieren.

Im Rahmen meiner Arbeit mit Pattern-Matching spielen unter anderem auch Records eine Rolle. Dabei ist mir aufgefallen, dass die Deklaration der Records mit Typen erfolgt, zum Beispiel: `public record Rec(Integer a, Integer b) {}` Es könnte jedoch Anwendungsfälle geben, in denen eine typlose Definition der Records sinnvoll wäre. Dies könnte dann so aussehen: `public record Rec(a, b) {}` Versucht man dies derzeit, erhält man folgenden Fehler: `java.lang.ClassFormatError: Field "a" in class <Unknown> has illegal signature "TJ;"` Ich kenne mich zu wenig mit der Verwendung von Records aus, um zu beurteilen, ob es sinnvoll ist, Records ohne Typen zu definieren oder ob dieser Anwendungsfall überhaupt relevant ist, es macht denke ich aber dennoch sinn das zu evaluieren.
RubenKraft added the
Type
Feature Request
labels 2024-07-17 15:09:34 +00:00
Owner

Ich halte es nicht für sinnvoll die Typen von Record-Argumenten errechnen zu lassen. Durch die Record-Deklarationen werden die Datenelemente definiert. Dabei muss definiert werden, welches Datum zum Typ des jeweilen Record gehört.

Bsp.
Aus
public record Rec(Integer a, Integer b) {}

Rec(1,1)

ist ein korrektes Datenelement; Rec("s", "d") wäre keines

Bei public record Rec(a, b) {}

wären beide Datenelemente und für jeden anderen Typ auch, auch für zwei unterschiedloche Typen. Damit gäbe es keine Einschränkung mehr. Wenn man das möchte muss man Generics einsetzen.

Ich halte es nicht für sinnvoll die Typen von Record-Argumenten errechnen zu lassen. Durch die Record-Deklarationen werden die Datenelemente definiert. Dabei muss definiert werden, welches Datum zum Typ des jeweilen Record gehört. Bsp. Aus public record Rec(Integer a, Integer b) {} Rec(1,1) ist ein korrektes Datenelement; Rec("s", "d") wäre keines Bei public record Rec(a, b) {} wären beide Datenelemente und für jeden anderen Typ auch, auch für zwei unterschiedloche Typen. Damit gäbe es keine Einschränkung mehr. Wenn man das möchte muss man Generics einsetzen.
Sign in to join this conversation.
No Milestone
No project
No Assignees
2 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: JavaTX/JavaCompilerCore#339
No description provided.