アンドロイドスタジオ-コトリンとジャワ車(1)

3493 ワード

Javaで作成したCameraActivity部分をCottlinに書き直し、2種類のコードを分析して学習します.
まず目に入ったのは継承部分
Javaはextendsとimplementsで、継承を区別できます.

extends


親には宣言/定義があり、子はメソッド/変数を使用できます.

インプリメンテーション


親オブジェクトは宣言のみで、定義(内容)は子オブジェクトで上書き(再定義)する必要があります.

abstract


extendsとインタフェースが混在しています.extendedですが、いくつかは抽象的な方法で実現されています.
上述したように、javaは2つの継承方法で明確に区別され、使用されているが、cottlinでは、後にリストすることによって明確な区別を行わないだけである.
ジャワ

コトリン

比較コードにはもう少し違いがあります.
クラスのpublicにはマークがなく、コトリンではpublicが基本とされ、省略できる.省略すると公衆だと思われます.
変数宣言の相違

val/var


val


valとして指定された不変型変数は、初期割当て値の場合、後で値を変更することはできません.値を変更すると、コンパイルエラーが発生します.
つまり、この値は初期化のみ可能で、変更はできません.
Javaではfinalと見なすことができます.
valは一度だけ初期化でき、値は変更できませんが、コンパイラがコードコンテキストをチェックするときにval変数が一度だけ初期化されている場合は、開発者は状況に応じてvalを複数の値に初期化(割り当て)できます.
valは初期化後は値を変更できません.
ただし、変数の参照が指すオブジェクトの内部値は変更できます.
fun main(args: Array<String>){
  // 1. val : value의 약어이며 변경 불가능(immutable)한 변수, 초기화만 가능
  val name = "Kotlin"
  //1-1. 위에서 이미 값이 할당 되었기 때문에 아래 코드처럼 값 할당 불가
  name = "Java"
  
  //2. 타입 지정 가능, 다만 1번처럼 컴파일러에서 타입이 추론 가능한 경우 생략 가능
  val name2: String = "Swift"
  //2-1. 초기화시 값을 할당하지 않을시엔 반드시 타입을 지정해야함
  val name2: String
  name2 = "Swift"
  
  //3. 코드 문맥에 따라 val 변수가 1번만 초기화 되는것이 맞다면 여러 값을 초기화(할당) 가능
  val name3: String 
  
  if (isSuccess()){ 
    name3 = "Anroid" 
  }else{ 
    name3 = "iOS"
  }
  println("name3 : $name3")
  
  //4. 변수의 참조가 가리키는 객체의 내부 값은 변경이 가능
  val nameArray = arrayListOf("Kotlin")
  nameArray.add("Java")
  println("nameArray : $nameArray")
}

var


varとして指定された可変タイプ変数は、初期化後に値を変更できます.
ただし、他のタイプの値は入力できません.
Stringタイプに初期化した後は、Intタイプに値を入力できません.
この変数を後でIntタイプとして再定義すると、「タイプ不一致」エラーが発生します.
定義したタイプを変更するにはjavaなどの変換が必要です.
fun main(args: Array<String>){
  //1. 초기화 후 값 변경 가능
  var name1 = "kotlin" 
  name1 = "java"
  println("name1 : $name1") //출력 : java
  
  //2. 초기화 시 타입을 지정 했다면 다른 타입의 값을 넣는 것은 불가능
  var name2 = "kotlin" 
  name2 = 77 //Type mismatch 에러 발생
}

?


1つのタイプを宣言するときに、後ろに疑問符を付けます.
ジャワ
    private String mCameraId;
    private CameraDevice cameraDevice;
    private CameraCaptureSession cameraCaptureSessions;
    private CaptureRequest captureRequest;
    private CaptureRequest.Builder captureRequestBuilder;
    private Size imageDimension;
コトリン
    private var mCameraId: String? = null
    private var cameraDevice: CameraDevice? = null
    private var cameraCaptureSessions: CameraCaptureSession? = null
    private var captureRequestBuilder: CaptureRequest.Builder? = null
    private var imageDimension: Size? = null
cottlinでは、デフォルトではパラメータはnullではありません.nullにするには、上記のタイプに従って操作しますか?貼ればいいです.
疑問符は必ずしも貼る必要はありません.疑問符の意味はnullableです.

!!


2つの感嘆符は上の疑問符とは違います
null値は絶対に入力できないことを示します.