小编Man*_*anu的帖子

在控制台应用程序中捕获ctrl + c事件(多线程)

我有一个控制台应用程序的主线程,以这种方式运行很少的外部进程

    private static MyExternalProcess p1;
    private static MyExternalProcess p2;
    private static MyExternalProcess p3;

    public void Main() {
        p1 = new MyExternalProcess();
        p2 = new MyExternalProcess();
        p3 = new MyExternalProcess();

        p1.startProcess();
        p2.startProcess();
        p3.startProcess();
    }

    public static void killEveryoneOnExit() {
        p1.kill();
        p2.kill();
        p3.kill();
    }


    class MyExternalProcess {
      private Process p;
      ...
      public void startProces() {
             // do some stuff
             PlayerProcess = new Process();
             ....
             PlayerProcess.Start();
             // do some stuff
      }

      public void kill() {
             // do some stuff
             p.Kill();
      }
    }          
Run Code Online (Sandbox Code Playgroud)

我需要做的是:当主线程被中断时(退出按钮或ctrl …

c# events

2
推荐指数
1
解决办法
4410
查看次数

为什么Java泛型不支持通配符的OR子句?

我正在应对一种情况,我希望有一个类型的通用

MyGeneric<T extends A | B>
Run Code Online (Sandbox Code Playgroud)

即镜像的东西

MyGeneric<T extends A & B>
Run Code Online (Sandbox Code Playgroud)

.如果B是接口,则允许最后一个; 不接受B作为类的原因是Java不显式支持多重继承.

接受两种类型中的任何一种的Generic类中,我得到确认,我对Java的OR子句的猜测是不可接受的.这意味着我对OR子句的猜测在语法上是不正确的,无论B是类还是接口.所以我想知道为什么Java不支持这个.有没有比"未实施"更强的理由?

- -编辑 - -

当然有很多情况下OR子句可能引起怀疑(见评论和答案),但看看我的情况:

public abstract class MyAbstractTask<T extends MyAbstractCommand> {
    @Override
    final protected void onPostExecute(String result) {
        super.onPostExecute(result);
        if (result != null) {
           T response = null;

           Gson gson = new Gson();
           response = gson.fromJson(result, clazz);7
           postProcess(response);
        }
    }
    abstract void postProcess(T task);
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我正在应用模板方法模式+命令模式.所以T是命令,postProcess负责运行它.

现在我可以拥有类似的东西

public class MyTask extends MyAbstractTask<MyCommand> {...}
Run Code Online (Sandbox Code Playgroud)

这很酷.

但是,假设您创建了一个"YourCommand"类.如果它与MyAbstractCommand无关,我不得不复制报告的代码或创建由两个抽象命令实现的公共接口或让YourCommand扩展MyAbstractCommand.如果支持OR子句,我可以将YourCommand添加到我的泛型的接受参数类型列表中.

java generics

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

创建活动时未调用静态初始化程序

我的主要活动中有以下代码:

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Fabric.with(this, new Crashlytics());
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        MyClass[] arr = MyClass.values();
        System.out.println(Arrays.deepToString(arr));
Run Code Online (Sandbox Code Playgroud)

我的类如下:

public class MyClass {

    public static MyClass A;
    public static MyClass B;
    public static MyClass C;

    static {
        System.out.println("Invoked");
        A = new MyClass("a");
        B = new MyClass("b");
        C = new MyClass("c");
    }

    private static Map<String, MyClass> values = null;
    private final String name;

    private MyClass(String name) {
        this.name = name;
        if (values == null)
            values = new …
Run Code Online (Sandbox Code Playgroud)

java static android

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

将Class传递给实例化泛型的方法

以下代码不起作用,因为标记的行不能编译:

MyClass {
    //singleton stuff
    private static MyClass instance;
    private MyClass () {}
    public static MyClass getInstance() {
        if(instance==null) {
            instance = new MyClass ();
        }
        return instance;
    }

    // method creating problems
    public NonGenericSuperClassOfGenericClass create(Class<?> c1, Class<?> c2) {
        return new GenericClass<c1,c2>; // DOES NOT COMPILE!!!
    }
}
Run Code Online (Sandbox Code Playgroud)

我不希望MyClass成为通用的.为什么?因为create方法的实际实现类似于以下内容:

    // method creating problems
    public NonGenericSuperClassOfGenericClass create(Class<?>... classes) {
        if(someCondition)
             return new GenericClass<classes[0],classes[1]>;
        else
             return new OtherGenericClass<classes[0]>;
}
Run Code Online (Sandbox Code Playgroud)

因此,我无法将MyClass与任何特定的泛型相结合.有没有办法用传递的参数实例化我的GenericClass?怎么样?

谢谢


谢谢您的回答.我会告诉你整个故事.

我正在使用Spring,我计划使用MongoDB.

GenericClass类是这样的:

 GenericClass<PersistetType1, Long> 
Run Code Online (Sandbox Code Playgroud)

要么 …

java generics

0
推荐指数
1
解决办法
867
查看次数

标签 统计

java ×3

generics ×2

android ×1

c# ×1

events ×1

static ×1