小编Sas*_*ota的帖子

在IntelliJ Idea中通过静态导入替换常量/方法的导入

我有一些格式有一些常量的代码ClassName.CONSTANT_NAME.我想快速替换它CONSTANT_NAME.但我没有找到任何有效的方法.

每次我想静态导入的东西,我必须手动删除类名,然后打开静态导入工具提示,其中可能包含常量名称的几个匹配...这是低效的.

有没有快速的方法将导入转换为静态导入?理想情况下,我会为此分配快捷方式.

java intellij-idea static-import

8
推荐指数
1
解决办法
1608
查看次数

在数组映射期间将lambda替换为flatMap中的方法引用

假设我们有一个Customer班级:

public class Customer {
    private Car[] cars;
    // getter, setter, constructor
}
Run Code Online (Sandbox Code Playgroud)

和我们需要在汽车上映射的客户的集合.

目前我正在以某种方式这样做:

Collection<Customer> customers = ...
customers.stream().flatMap(
        customer -> Arrays.stream(customer.getCars())
)...
Run Code Online (Sandbox Code Playgroud)

它运行良好,但代码看起来不优雅.我真的想用使用方法引用的代码替换它,这些代码通常看起来更易读,更紧凑.但是使用数组类型的字段会很难.

问题:有没有任何方法可以增强flatMap呼叫,使其更具可读性/紧凑性/清晰度?

java lambda functional-programming java-8 method-reference

8
推荐指数
2
解决办法
1443
查看次数

如何使用 java / kotlin 中的注释处理将方法附加到现有类?

我是注释处理和代码生成的新手。我想知道如何执行这样的操作,比如将新方法附加到现有类。这是我想要做的一个例子:

假设我们有一个带有自定义注释的类,如下所示:

class SourceClass {
    @CustomAnnotation
    fun annotatedFun1(vararg argument: Any) {
        //Do something
    }

    @CustomAnnotation
    fun annotatedFun2(vararg argument: Any) {
        //Do something
    }

    fun someOtherFun() {
        //Do something
    }
}
Run Code Online (Sandbox Code Playgroud)

我想得到的结果 - 该类的扩展副本:

class ResultClass {
    fun hasFunWithName(name: String): Boolean {
        return (name in arrayOf("annotatedFun1", "annotatedFun2"))
    }

    fun callFunByName(name: String, vararg arguments: Any) {
        when (name) {
            "annotatedFun1" -> annotatedFun1(*arguments)
            "annotatedFun2" -> annotatedFun2(*arguments)
        }
    }

    fun annotatedFun1(vararg argument: Any) {
        //Do something
    }

    fun annotatedFun2(vararg argument: Any) {
        //Do something …
Run Code Online (Sandbox Code Playgroud)

java annotations codegen kotlin kapt

8
推荐指数
1
解决办法
887
查看次数

应用程序暂停后,Scrollable TextView不允许选择文本

我有一个可滚动TextView的用户可以选择文本.我通过设置移动方法来添加滚动条ScrollingMovementMethod.

问题:除非应用程序暂停(例如,切换应用程序后),否则选择效果很好.一旦应用程序处于活动状态,选择将停止工作,并在日志中收到以下消息:

W/TextView:TextView不支持文本选择.选择取消.

我的设置:

我有一个Activity CoordinatorLayout和一个TextView包含在RelativeLayout其中的片段,如下所示:

<TextView
    android:id="@+id/text_view"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentStart="true"
    android:scrollbars="vertical" />
Run Code Online (Sandbox Code Playgroud)

在Java代码中,我必须这样做:

textView.setMovementMethod(new ScrollingMovementMethod());
textView.setTextIsSelectable(true);
textView.setFocusable(true);
textView.setFocusableInTouchMode(true);
Run Code Online (Sandbox Code Playgroud)

因为根据这个,这是唯一的工作方式,这个问题.

编辑:

问题出在以下调用中

textView.setMovementMethod(new ScrollingMovementMethod());
Run Code Online (Sandbox Code Playgroud)

如果我删除它有效,但我无法理解.

重现问题的最小步骤:

1)TextView使用以下布局创建一个空的Activity .

<android.support.design.widget.CoordinatorLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:id="@+id/text_view"
        android:text="Some very very very long text..."
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentStart="true"
        android:scrollbars="vertical" />

</android.support.design.widget.CoordinatorLayout>
Run Code Online (Sandbox Code Playgroud)

2)设置TextViewin onStart()方法的可见性参数.

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) …
Run Code Online (Sandbox Code Playgroud)

android textview android-layout

8
推荐指数
1
解决办法
838
查看次数

Jenkins:从与代理(另一个 Docker 容器)一起运行的阶段连接到 Docker 容器

我正在重新设计管道以使用声明式管道方法,以便我能够在每个阶段使用 Docker 映像

目前我有以下工作代码,它执行连接到在 Docker 容器中运行的数据库的集成测试。

node {
    // checkout, build, test stages...
    stage('Integration Tests') {            
        docker.image('mongo:3.4').withRun(' -p 27017:27017') { c ->
        sh "./gradlew integrationTest"
    }
}
Run Code Online (Sandbox Code Playgroud)

现在使用声明式管道,相同的代码看起来像这样:

pipeline {
    agent none
    stages {
        // checkout, build, test stages...
        stage('Integration Test') {
            agent { docker { image 'openjdk:11.0.4-jdk-stretch' } }
            steps {
                script {
                    docker.image('mongo:3.4').withRun(' -p 27017:27017') { c ->
                        sh "./gradlew integrationTest"
                    }
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

问题:该阶段现在在 Docker 容器中运行docker.image(),并且运行会导致docker: …

jenkins docker jenkins-pipeline jenkins-declarative-pipeline

8
推荐指数
1
解决办法
5049
查看次数

仅使用 HTML 使 GitHub 的 README 在智能手机和台式机上看起来不同(CSS 受限)

我有一个带有README.md文件的 GitHub 项目。我通过以下方式嵌入图像

<img src="./logo.svg" align="right" width="180px">
Run Code Online (Sandbox Code Playgroud)

这是此类图像的示例

注意: GitHub 允许使用嵌入式 HTML 但不允许使用 CSS,这就是我使用width属性而不是 css 的原因。

这样图像就占据了屏幕的右侧,允许将文本放在左侧。

问题:如果您在智能手机上打开此类链接,则文本空间太小,并且拆分的单词或字母占据整行看起来很糟糕。如果我可以使用更大的width专门用于移动设备,那就太好了。但是 GitHub 限制在 markdown 文件中使用 CSS,我不能使用@media查询。

问题:如何在不使用 CSS 的情况下使 GitHub 的 README 在移动和桌面上看起来不同?

html css github readme

8
推荐指数
1
解决办法
371
查看次数

如何在 IntelliJ Idea 中为生成的单元测试添加默认导入

而java类Idea的生成单元测试添加了默认的静态导入

import static org.junit.Assert.*;
Run Code Online (Sandbox Code Playgroud)

我想通过更多导入来扩展本节,但我还没有找到配置它们的地方。

我正在使用 IntelliJ IDEA 2017.1 Ultimate

java junit intellij-idea

7
推荐指数
1
解决办法
561
查看次数

Angular:根据服务方法调用设置路由

我通过设置路由配置@NgModule.我有一项服务,根据特定条件确定应该为用户显示应用程序的哪些部分.我需要调用该服务并根据返回的值设置路由.

问题:路径配置是在注释中设置的,我无法在这样的设置中获得如何调用服务.

这里更具体的是我想要增强的示例配置.

我目前的路由设置:

const appRoutes: Routes = [
    {
        path: '',
        redirectTo: 'first-route',
        pathMatch: 'full'
    },
    {
        path: 'first-route',
        component: FirstComponent,
        pathMatch: 'full'
    },
    {
        path: 'second-route',
        component: SecondComponent,
        pathMatch: 'full'
    },
    ...
];

@NgModule({
    imports: [RouterModule.forChild(appRoutes)],
    exports: [RouterModule]
})
export class MyRoutingModule {
}
Run Code Online (Sandbox Code Playgroud)

应该更改路由设置的服务:

@Injectable()
export class MyService {
    getAccessibleRoutes(): Observable<string[]> {...}
}
Run Code Online (Sandbox Code Playgroud)

问题:如何拨打服务电话并更改路线?

注意:我还查看了"动态添加Angular中的路由""我们如何动态地将新路由添加到RouterModule(@NgModule导入)",但我还没有找到明确的答案.

javascript url-routing typescript angular-ui-router angular

7
推荐指数
1
解决办法
1866
查看次数

ExoPlayer:删除播放按钮和时间轴行之间的冗余空格

我有自定义的ExoPlayer控制栏.它需要相当大的空间,我想让它变得更窄.

这是我要删除/缩小的内容(用红色突出显示):

在此输入图像描述

正如你看到的,我设法通过玩弄已经删除了一些空间paddingTop,layout_marginTop,layout_height参数(它使用的是更大).

但这还不够,还需要很大的空间.

问题:如何缩小图片上标注的空白区域?

这是我的自定义的exo_player_control_view.xml样子(为了简单起见,删除了大部分元素):

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="bottom"
    android:background="#CC000000"
    android:layoutDirection="ltr"
    android:orientation="vertical">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:orientation="horizontal">
        <ImageButton
            android:id="@id/exo_play"
            style="@style/ExoMediaButton.Play" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center_vertical"
        android:orientation="horizontal">
        <com.google.android.exoplayer2.ui.DefaultTimeBar
            android:id="@id/exo_progress"
            android:layout_width="0dp"
            android:layout_height="18dp"
            android:layout_weight="1" />
    </LinearLayout>

</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

注意:我完全理解通过缩小这些区域可能会使控制面板不太可用.没关系.我希望至少能够改变它们并测试它是如何工作的.

controls android exoplayer

7
推荐指数
1
解决办法
350
查看次数

Go:当没有对包进行测试时错误的覆盖范围

我有一个具有以下结构的 Go 项目:

foo/foo.go
foo/foo_test.go
main.go
Run Code Online (Sandbox Code Playgroud)

如您所见,没有针对main.go.

我使用以下命令收集覆盖率报告:

go test ./foo ./ -coverprofile=coverage.txt -covermode=atomic
Run Code Online (Sandbox Code Playgroud)

在这里./foo./显示在哪里寻找包裹。

问题:我将覆盖率报告发送到 codecov.io,它显示我的代码 100% 被测试覆盖。但这不是真的,因为我main.go根本没有测试。

系统似乎只计算那些明确指定测试文件的包。

问题:如何修复覆盖率报告以计算有关未测试包的信息?

注意:你可以在GitHub 上找到我的项目,真正的统计数据在这里。该项目具有不同的结构,但问题仍然存在(错误的覆盖范围)。

code-coverage go codecov go-testing

7
推荐指数
1
解决办法
1329
查看次数