জাভাতে কি সি ++ এর এনালগ রয়েছে struct
:
struct Member {
string FirstName;
string LastName;
int BirthYear;
};
আমার নিজের ডেটা টাইপ ব্যবহার করা দরকার।
উত্তর:
জাভা অবশ্যই কোনও স্ট্রাক্ট নেই :) তবে আপনি এখানে যা বর্ণনা করেছেন তা জাভাবিয়ান শ্রেণির মতো দেখাচ্ছে।
inline class
অদূর ভবিষ্যতে এমন কোনও সময়ে আসবে যা আমি বিশ্বাস করি যে এটি আরও কাঠামোর মতো।
জাভাতে একটি কাঠামোর সমতুল্য হবে
class Member
{
public String FirstName;
public String LastName;
public int BirthYear;
};
এবং সঠিক পরিস্থিতিতে এর সাথে কোনও ভুল নেই। C ++ এর মতো অনেকটাই আপনি কখন স্ট্রাক্ট আয়াত ব্যবহার করেন কখন আপনি এনক্যাপসুলেটেড ডেটা সহ কোনও শ্রেণি ব্যবহার করেন।
আসলে সি ++ এর একটি কাঠামো একটি শ্রেণি (যেমন আপনি সেখানে পদ্ধতিগুলি সংজ্ঞায়িত করতে পারেন, এটি প্রসারিত হতে পারে, এটি একটি শ্রেণীর মতো কাজ করে), পার্থক্য কেবলমাত্র ততটাই হ'ল ডিফল্ট অ্যাক্সেস মোডফায়ারগুলি পাবলিকের জন্য সেট করা হয় (শ্রেণীর জন্য তারা ব্যক্তিগততে সেট করা থাকে) গতানুগতিক).
এটি সত্যই সি ++ এর মধ্যে একমাত্র পার্থক্য, অনেক লোক তা জানেন না। ; )
জাভাতে সি ++ এর স্ট্রাক্টগুলির সাথে কোনও অ্যানালগ নেই, তবে আপনি সমস্ত পাবলিক সদস্যের সাথে ক্লাস ব্যবহার করতে পারেন।
internal
হ'ল এটির চেয়ে কম দৃশ্যমান protected
। একটি internal
সদস্য ঘোষণা com.myapp.lib
প্রবেশযোগ্য হবে না com.myapp.main
, তাই আপনি একই প্রকল্পের মধ্যে সর্বত্র এটি অ্যাক্সেস করতে সক্ষম নাও হতে পারে।
public
হ'ল আপনি হয়ত এমন কোনও রেকর্ড প্রকাশ করতে চাইবেন না যা সহজেই অনেক শ্রেণিতে ভুল অবস্থায় ফেলে দেওয়া যেতে পারে; এটি সাধারণত অভ্যন্তরীণ রাখা উচিত। নোট করুন যে জাভা রেকর্ড, যেমন এই উত্তরে উল্লিখিত হয়েছে তা অপরিবর্তনীয় (তবে আপনি অবশ্যই নতুন রেকর্ড তৈরি করতে কারখানার পদ্ধতি ব্যবহার করতে পারেন)
জাভা 14 রেকর্ডগুলির জন্য সমর্থন যুক্ত করেছে, যা কাঠামোগত ডেটা ধরণের যা নির্মাণ করা খুব সহজ।
আপনি জাভা রেকর্ডটি এভাবে প্রকাশ করতে পারেন:
public record AuditInfo(
LocalDateTime createdOn,
String createdBy,
LocalDateTime updatedOn,
String updatedBy
) {}
public record PostInfo(
Long id,
String title,
AuditInfo auditInfo
) {}
এবং, জাভা সংকলক AuditInfo
রেকর্ডের সাথে সম্পর্কিত নিম্নলিখিত জাভা শ্রেণি তৈরি করবে :
public final class PostInfo
extends java.lang.Record {
private final java.lang.Long id;
private final java.lang.String title;
private final AuditInfo auditInfo;
public PostInfo(
java.lang.Long id,
java.lang.String title,
AuditInfo auditInfo) {
/* compiled code */
}
public java.lang.String toString() { /* compiled code */ }
public final int hashCode() { /* compiled code */ }
public final boolean equals(java.lang.Object o) { /* compiled code */ }
public java.lang.Long id() { /* compiled code */ }
public java.lang.String title() { /* compiled code */ }
public AuditInfo auditInfo() { /* compiled code */ }
}
public final class AuditInfo
extends java.lang.Record {
private final java.time.LocalDateTime createdOn;
private final java.lang.String createdBy;
private final java.time.LocalDateTime updatedOn;
private final java.lang.String updatedBy;
public AuditInfo(
java.time.LocalDateTime createdOn,
java.lang.String createdBy,
java.time.LocalDateTime updatedOn,
java.lang.String updatedBy) {
/* compiled code */
}
public java.lang.String toString() { /* compiled code */ }
public final int hashCode() { /* compiled code */ }
public final boolean equals(java.lang.Object o) { /* compiled code */ }
public java.time.LocalDateTime createdOn() { /* compiled code */ }
public java.lang.String createdBy() { /* compiled code */ }
public java.time.LocalDateTime updatedOn() { /* compiled code */ }
public java.lang.String updatedBy() { /* compiled code */ }
}
লক্ষ করুন যে, কন্সট্রাকটর, অ্যাকসেসর পদ্ধতি, সেইসাথে equals
, hashCode
এবং toString
, আপনার জন্য তৈরি করা হয়, তাই এটি খুব জাভা রেকর্ডস ব্যবহার করতে সুবিধাজনক।
একটি জাভা রেকর্ড অন্য জাভা অবজেক্টের মতো তৈরি করা যেতে পারে:
PostInfo postInfo = new PostInfo(
1L,
"High-Performance Java Persistence",
new AuditInfo(
LocalDateTime.of(2016, 11, 2, 12, 0, 0),
"Vlad Mihalcea",
LocalDateTime.now(),
"Vlad Mihalcea"
)
);
আপনি কীভাবে জাভা রেকর্ডগুলি কাস্টমাইজ করতে পারবেন সে সম্পর্কে আরও তথ্যের জন্য এই নিবন্ধটি দেখুন ।
প্রজেক্ট জুনিয়নের সাথে আপনি জাভাতে স্ট্রাক্ট ব্যবহার করতে পারেন @ স্ট্রোক টীকা সহ একটি ক্লাস টিকা দিয়ে
@Struct
class Member {
string FirstName;
string LastName;
int BirthYear;
}
প্রকল্পের ওয়েবসাইটে আরও তথ্য: https://tehleo.github.io/junion/
হ্যাঁ, জাভাতে এখনও স্ট্রাক্ট / মান টাইপ নেই। তবে জাভা আসন্ন সংস্করণে আমরা যাচ্ছি inline class
যা সি # তে কাঠামোর অনুরূপ এবং আমাদের বরাদ্দ ফ্রি কোড লিখতে সহায়তা করবে।
inline class point {
int x;
int y;
}
"সত্যই" খাঁটি স্ট্রোক জাভাতে সমর্থিত নয়। উদাহরণস্বরূপ, সি # struct
এমন সংজ্ঞাগুলি সমর্থন করে যা মানগুলি উপস্থাপন করে এবং যে কোনও সময় বরাদ্দ করা যেতে পারে।
জাভাতে, সি ++ স্ট্রাক্টগুলির একটি অনুমিতকরণের অনন্য উপায়
struct Token
{
TokenType type;
Stringp stringValue;
double mathValue;
}
// Instantiation
{
Token t = new Token;
}
(স্ট্যাটিক বাফার বা তালিকা) ব্যবহার না করে এমন কিছু করছে
var type = /* TokenType */ ;
var stringValue = /* String */ ;
var mathValue = /* double */ ;
সুতরাং, কেবল ভেরিয়েবলগুলি বরাদ্দ করুন বা স্ট্যাটিকালি তাদের একটি শ্রেণিতে সংজ্ঞায়িত করুন।
var
, তাই না?
জাভা 14 এর পাশাপাশি এটি রেকর্ড সমর্থন করে। আপনি যে https://docs.oracle.com/en/java/javase/14/docs/api/java.base/java/lang/Record.html পরীক্ষা করতে চাইতে পারেন
public record Person (String name, String address) {}
Person person = new Person("Esteban", "Stormhaven, Tamriel");
এবং জাভা 15 এর পরে সিলযুক্ত ক্লাস রয়েছে htt https://openjdk.java.net/jeps/360
sealed interface Shape permits Circle, Rectangle {
record Circle(Point center, int radius) implements Shape { }
record Rectangle(Point lowerLeft, Point upperRight) implements Shape { }
}
firstName
,lastName
এবংbirthYear
(অথবাyearOfBirth
অবশ্যই)।