Kotlin-Object
object 키워드
object 키워드는 두 가지 의미를 나타낼 수 있습니다. 하나는 대상 표현식이고, 다른 하나는 대상 성명입니다.
1. 객체 표현식
익명 대상 계승binding.tvTitle.setOnClickListener(object : View.OnClickListener {
override fun onClick(v: View?) {
Toast.makeText(this@MainActivity, " ", Toast.LENGTH_SHORT);
}
})
2. 개체 선언
Object로 수식된 클래스는 정적 클래스이고 그 안의 방법과 변수는 모두 정적 클래스입니다.
2.1 직접 성명 클래스 private const val TAG: String = "DEMO_TAG"
fun log(): Unit {
Log.i(TAG, "log: ")
}
2.2 정적 내부 클래스 선언class DemoManager{
object MyObject {
fun a() {
Log.e(TAG," object ")
}
}
}
만약 a () 방법을 호출해야 한다면
binding.tvTitle.setOnClickListener(object : View.OnClickListener {
override fun onClick(v: View?) {
Toast.makeText(this@MainActivity, " ", Toast.LENGTH_SHORT);
}
})
private const val TAG: String = "DEMO_TAG"
fun log(): Unit {
Log.i(TAG, "log: ")
}
class DemoManager{
object MyObject {
fun a() {
Log.e(TAG," object ")
}
}
}
fun init() {
MyObject.a()
}
MyObject.INSTANCE.a();
2. companion object
companion object는 반생 대상으로 수식되어 있으며 반생 대상은 클래스에 하나만 존재합니다. 자바의 정적 방법과 유사합니다. 자바에서 클래스를 사용하여 정적 구성원에 접근하고 정적 방법입니다.companion object {
private val TAG = "DemoManager"
fun b() {
Log.e(TAG," companion objec t ")
}
}
companion object {
private val TAG = "DemoManager"
fun b() {
Log.e(TAG," companion objec t ")
}
}
fun init(){
b()
}
DemoManager.Companion.b();
3. companion object에서 외부 구성원 변수를 어떻게 호출하는가
3.1 외부 구성원 변수가 companion object에서 호출되지 않는 이유
class DemoManager {
private val MY_TAG = "DemoManager"
fun init(){
b()
}
companion object {
fun b() {
Log.e(MY_TAG," companion objec t ")
}
}
}
위 코드에서 MY태그는 호출되지 않을 겁니다.원리는 매우 간단하다. 자바에서 우리는 정적 방법을 쓴다. 구성원 변수를 호출해야 한다면 호출할 수 없다.private String TAG = "MainActivity";
public static void init(){
Log.e(TAG,"init() ");
}
TAG를 정적 구성원 변수로 수정한 경우에만 호출할 수 있습니다.private static String TAG = "MainActivity";
public static void init(){
Log.e(TAG,"init() ");
}
이를 통해 알 수 있듯이 자바에서 정적 방법으로 구성원 변수를 호출하는데 구성원 변수는 반드시 정적이어야 한다.kotlin에서도 마찬가지이기 때문에companion object에서 비정상적인 구성원 변수를 호출해도 호출되지 않는다.
3.2 어떻게 해결해야만 호출할 수 있습니까?
companion object {
private val MY_TAG = "DemoManager"
fun b() {
Log.e(MY_TAG," companion objec t ")
}
}
인용한 구성원 변수도 정태적으로 수식하면 인용할 수 있다.
4. 상수와 정적 방법
상수
Java: class StaticDemoActivity {
public static final String LOAN_TYPE = "loanType";
public static final String LOAN_TITLE = "loanTitle";
}
Kotlin: class StaticDemoActivity {
companion object StaticParams{
val LOAN_TYPE = "loanType"
val LOAN_TITLE = "loanTitle"
}
}
class StaticDemoActivity {
companion object { //
const val LOAN_TYPE = "loanType"
const val LOAN_TITLE = "loanTitle"
}
}
주:const 키워드는 상수를 수식하는 데 사용되며 val만 수식할 수 있고 var은 수식할 수 없습니다. companion object의 이름은 생략할 수 있고 Companion으로 지칭할 수 있습니다.
상수 인용 (자바 인용kotlin 코드에 대한 인용)
TestEntity 클래스는 StaticDemoActivity의 상수를 참조합니다 class TestEntity {
public TestEntity () {
String title = StaticDemoActivity.Companion.getLOAN_TITLE();
}
}
class TestEntity {
public TestEntity () {
String title = StaticDemoActivity.StaticParams.getLOAN_TITLE();
}
}
class TestEntity {
public TestEntity () {
String title = StaticDemoActivity.LOAN_TITLE;
String type= StaticDemoActivity.LOAN_TYPE;
}
}
정적 방법
class DemoManager {
private val MY_TAG = "DemoManager"
fun init(){
b()
}
companion object {
fun b() {
Log.e(MY_TAG," companion objec t ")
}
}
}
private String TAG = "MainActivity";
public static void init(){
Log.e(TAG,"init() ");
}
private static String TAG = "MainActivity";
public static void init(){
Log.e(TAG,"init() ");
}
companion object {
private val MY_TAG = "DemoManager"
fun b() {
Log.e(MY_TAG," companion objec t ")
}
}
상수
Java: class StaticDemoActivity {
public static final String LOAN_TYPE = "loanType";
public static final String LOAN_TITLE = "loanTitle";
}
Kotlin: class StaticDemoActivity {
companion object StaticParams{
val LOAN_TYPE = "loanType"
val LOAN_TITLE = "loanTitle"
}
}
class StaticDemoActivity {
companion object { //
const val LOAN_TYPE = "loanType"
const val LOAN_TITLE = "loanTitle"
}
}
주:const 키워드는 상수를 수식하는 데 사용되며 val만 수식할 수 있고 var은 수식할 수 없습니다. companion object의 이름은 생략할 수 있고 Companion으로 지칭할 수 있습니다.
상수 인용 (자바 인용kotlin 코드에 대한 인용)
TestEntity 클래스는 StaticDemoActivity의 상수를 참조합니다 class TestEntity {
public TestEntity () {
String title = StaticDemoActivity.Companion.getLOAN_TITLE();
}
}
class TestEntity {
public TestEntity () {
String title = StaticDemoActivity.StaticParams.getLOAN_TITLE();
}
}
class TestEntity {
public TestEntity () {
String title = StaticDemoActivity.LOAN_TITLE;
String type= StaticDemoActivity.LOAN_TYPE;
}
}
정적 방법
class StaticDemoActivity {
public static final String LOAN_TYPE = "loanType";
public static final String LOAN_TITLE = "loanTitle";
}
class StaticDemoActivity {
companion object StaticParams{
val LOAN_TYPE = "loanType"
val LOAN_TITLE = "loanTitle"
}
}
class StaticDemoActivity {
companion object { //
const val LOAN_TYPE = "loanType"
const val LOAN_TITLE = "loanTitle"
}
}
class TestEntity {
public TestEntity () {
String title = StaticDemoActivity.Companion.getLOAN_TITLE();
}
}
class TestEntity {
public TestEntity () {
String title = StaticDemoActivity.StaticParams.getLOAN_TITLE();
}
}
class TestEntity {
public TestEntity () {
String title = StaticDemoActivity.LOAN_TITLE;
String type= StaticDemoActivity.LOAN_TYPE;
}
}
class StaticDemoActivity {
public static void test(){
、、、
}
}
class StaticDemoActivity {
public static void test(){
、、、
}
}
정적 방법 인용 (자바 인용kotlin 코드에만 대한 인용)
TestEntity 클래스는 StaticDemoActivity의 정적 방법을 참조합니다
class TestEntity {
public TestEntity () {
StaticDemoActivity.Companion.test();
}
}
class TestEntity {
public TestEntity () {
StaticDemoActivity.StaticParams.test();
}
}
companion object {}에서 정적 상수나 정적 방법, 단례 등을 수식하는 데 사용
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSON
JSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다.
그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다.
저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.