Typlose Erstellung von Records #339
Labels
No Label
Codegen
confirmed
duplicate
Eclipse-Plugin
Feature Request
generics
in progress
invalid
JavaCompilerCore
needs info
Parser
Trash
Type
Unify
won't fix
works for me
No Milestone
No project
No Assignees
2 Participants
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: JavaTX/JavaCompilerCore#339
Loading…
Reference in New Issue
Block a user
No description provided.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
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.
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.