我正在尝试在Android Studio中使用Java 8功能。具体方法参考。更具体地说,是对特定对象的实例方法的引用。要使用Oracle docs page。
的措辞我的违规代码就是这个。相关的方法是initTablet和doStuff,这是我用来解决这个问题的虚拟方法。
public class SettingsPresenter {
SettingsFragment fragment;
DeviceModel deviceModel;
public SettingsPresenter(SettingsFragment fragment) {
this.fragment = fragment;
Context appContext = fragment.getActivity().getApplicationContext();
deviceModel = new DeviceModel(appContext);
}
public boolean showTabletInit() {
Map<String, String> creds = deviceModel.getServerCredentials();
if (creds.get("pname").isEmpty() || creds.get("pvalue").isEmpty()) {
return true;
}
return false;
}
public int doStuff() {
return 1;
}
public void initTablet(String tokenId) {
Log.d("debug", tokenId);
deviceModel.initServerCredentials(tokenId, this::doStuff);
}
}
突出显示错误
deviceModel.initServerCredentials(tokenId, this::doStuff);
使用&#34; this :: doStuff&#34;显示无法解决方法错误。
我按照Android Java 8 support page步骤进行了操作。因此,我的项目结构中包含以下值:
我的build.grandle看起来像这样
申请插件:&#39; com.android.application&#39;
android {
compileSdkVersion 25
buildToolsVersion "26.0.2"
defaultConfig {
applicationId "com.hoistiq.machinelog"
minSdkVersion 25
targetSdkVersion 25
versionCode 2
versionName "0.1.1"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
dependencies {
implementation 'com.android.support:recyclerview-v7:25.1.0'
compile fileTree(include: ['*.jar'], dir: 'libs')
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:25.1.0'
compile 'com.android.support:support-v4:25.1.0'
compile 'com.android.support:design:25.1.0'
compile 'com.android.support.constraint:constraint-layout:1.0.0-alpha9'
compile 'com.google.code.gson:gson:2.4'
compile 'com.android.volley:volley:1.0.0'
compile 'com.google.android:flexbox:0.2.5'
testCompile 'junit:junit:4.12'
}
这完全在Android Studio 3.0上。 谢谢。
答案 0 :(得分:0)
使用/尝试该功能不是这种情况。简单来说,当你不在外面类(不在内部)时,你想引用一些东西。如果你想在类中引用一些方法,只需像dostuff
或this.dostuff
那样调用它。如果你想练习这个,你可以做以下的事情:
SettingsPresenter MyPresenter = new SettingsPresenter(A_Fragment);
deviceModel.initServerCredentials(tokenId, MyPresenter.doStuff);
方法dostuff
不是静态的,所以我定义了一个对象。你可以用静态方法和类名来实现。