[解決済み] Androidで実現するJava 7の言語機能
質問
誰かJava 7の新しい言語機能をAndroidで使ってみた人はいますか? AndroidがJavaの吐き出すバイトコードを読み、dexに変えることは知っています。そこで、私の質問は、Java 7のバイトコードを理解することができるかということです。
どのように解決するのですか?
を使用している場合 Android Studio の場合、Java 7 言語 はパッチ無しで自動的に有効になるはずです。Try-with-resourceはAPI Level 19+が必要で、NIO 2.0のものが欠落しています。
Java 7 の機能を利用できない場合は
ヌノ
を編集する方法について回答しています。
build.gradle
.
以下は歴史的な興味本位です。
Java 7のごく一部は、確かにAndroidで使うことができます(注:私は4.1でしかテストしていません)。
まず、EclipseのADTが使えなかったのは ハードコーディングされています。 Javaコンパイラが1.5と1.6しか対応していないこと。ADTを再コンパイルすることもできますが、Android全体を再コンパイルする以外に、簡単な方法はないと思います。
でも、Eclipseを使う必要はないんですよ。たとえば Android Studio 0.3.2 , IntelliJ IDEA CE およびその他の javac ベースの IDE は、Android へのコンパイルをサポートしています。 と でJava 8まで対応させることも可能です。
- ファイル → プロジェクト構造 → モジュール → (2番目のペインでモジュールを選択) → 言語レベル → ("7.0 - Diamonds, ARM, multi-catch, etc." を選択)
これは、Java 7のみを許可しています 言語機能 というのも、改良の半分くらいはライブラリから来るものだからです。使える機能は、ライブラリに依存しない機能です。
-
ダイヤモンド演算子(
<>
) - 文字列の切り替え
-
マルチキャッチ(
catch (Exc1 | Exc2 e)
) -
数値リテラルでのアンダースコア (
1_234_567
) -
バイナリ・リテラル (
0b1110111
)
また、これらの機能は使用できません なお :
-
は
try
-with-resources ステートメント - 存在しないインターフェイス "java.lang.AutoCloseable" を必要とするため (これは 4.4+ で公に使用することができます) - SafeVargs アノテーション - "java.lang.SafeVargs" が存在しないため。
... "まだ" :) Android のライブラリは 1.6 をターゲットにしていますが、Android のソースには以下のようなインターフェイスがあることがわかりました。
オートクローズ可能
のような従来のインターフェースと
クローズ可能
は AutoCloseable を継承しています (SafeVarargs は本当に欠落していますが)。リフレクションでその存在を確認することができた。隠されているのは、単にJavadocに
@hide
というタグがあり、それが原因で "android.jar" はそれらを含んでいませんでした。
すでに既存の質問として 隠しAPIや内部APIが利用可能なAndroid SDKを構築するにはどうすればよいですか? これらのメソッドを取り戻す方法について。必要なのは 置き換える をカスタマイズしたものに変更すると、多くのJava 7 APIが利用可能になります(手順はEclipseと同様です)。プロジェクト構造 → SDKsをチェックしてください)。
AutoCloseable に加えて、(唯一)以下の Java 7 ライブラリ機能 も公開されています。
- ConcurrentModificationException、LinkageError、AssertionErrorの例外チェーニングコンストラクタ
- プリミティブの静的な .compare() メソッド。Boolean.compare(), Byte.compare(), Short.compare(), Character.compare(), Integer.compare(), Long.compare().
- 通貨 : .getAvailableCurrencies(), .getDisplayName() (ただし なし .getNumericCode())です。
- ビットセット : .previousSetBit()、.previousClearBit()、.valueOf()、.toLongArray()、.toByteArray()
- コレクション : .emptyEnumeration(), .emptyIterator(), .emptyListIterator()
- オートクローズ可能
- 投げることができる : .addSuppressed()、.getSuppressed()、4引数コンストラクタを使用します。
- キャラクター : .compare(), .isSurrogate(), .getName(), .highSurrogate(), .lowSurrogate(), .isBmpCodePoint() (しかし) なし .isAlphabetic()と.isIdeographic())
- システム:.lineSeparator() (ドキュメントなし?)
- java.lang.reflect.モディファイア : .classModifiers()、.constructorModifiers()、.fieldModifiers()、.interfaceModifiers()、.methodModifiers()
- ネットワークインターフェース : .getIndex(), .getByIndex()
- InetSocketAddress : .getHostString()
- InetAddress : .getLoopbackAddress()
- ロガー : .getGlobal()
- ConcurrentLinkedDeque
- AbstractQueuedSynchronizer : .hasQueuedPredecessors()
- デフレーターアウトプットストリーム : 3 つのコンストラクタに "syncFlush" を付けています。
- デフレーター : .NO_FLUSH, .SYNC_FLUSH, .FULL_FLUSH, .deflate() を4つの引数で指定します。
基本的には以上です。特に、NIO 2.0は存在しませんし、Arrays.asListはまだ@SafeVargsではありません。
関連
-
エラー java.util.NoSuchElementException
-
[解決済み] Java enumのメンバーを比較する:==またはequals()?
-
linux run jarfile Invalid or corrupt jarfile error.
-
[解決済み] JavaでInputStreamを読み込んでStringに変換するにはどうすればよいですか?
-
[解決済み] JavaでNullPointerExceptionを回避する方法
-
[解決済み] Androidのソフトキーボードをプログラムで閉じる/隠すにはどうすればよいですか?
-
[解決済み] Eclipseが起動できない - Javaは起動したが終了コード=13を返した
-
[解決済み】Android UserManager.isUserAGoat()の正しい使用例?)
-
[解決済み】Android Studioです。jarをライブラリとして追加しますか?
-
[解決済み】Javaの「ダブルブレース初期化」の効率化?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Java エラー報告 スレッド "main" での例外 java.util.NoSuchElementException
-
スキャナは、タイプに解決することはできません最もルーキー初心者の質問
-
eclipseにプロジェクトをインポートした後、Editorにmain typeが含まれない問題
-
Eclipseでプロジェクトエクスプローラービューとパッケージエクスプローラービューを使う
-
node js npm gruntインストール、elasticsearch-head 5.Xインストール
-
spring-boot 401 このリソースにアクセスするには完全な認証が必要です エラー解決
-
Javaエラーメッセージがenclosingクラスでない
-
javaでよく使われる英単語
-
SocketTimeoutExceptionの解決方法です。読み込みがタイムアウトした
-
java -serverコマンドで「Error: no `server' JVM at ... jvm.dll」を解決する方法です。