Как эмулировать поскольку-оператор C# в Java

Я бы рекомендовал вам напрямую использовать интерфейс, который обеспечивает искру. Он предоставляет много информации и показателей по времени, шагам, использованию сети и т. Д. ...

Вы можете узнать подробнее об этом здесь: https://spark.apache.org/docs/ last / monitoring.html

Кроме того, в новой версии Spark (1.4.0) есть хороший визуализатор, чтобы понять шаги и этапы ваших искровых заданий.

49
задан Michael Myers 29 September 2008 в 14:31
поделиться

5 ответов

Вот реализация как, как предложено @Omar Kooheji:

public static <T> T as(Class<T> clazz, Object o){
    if(clazz.isInstance(o)){
        return clazz.cast(o);
    }
    return null;
}

as(A.class, new Object()) --> null
as(B.class, new B())  --> B
54
ответ дан Aaron Maenpaa 7 November 2019 в 21:34
поделиться

Я думал бы, что Вы будете иметь к самокрутке:

return (x instanceof Foo) ? (Foo) x : null;

РЕДАКТИРОВАНИЕ: Если Вы не хотите, чтобы Ваш клиентский код имел дело с пустыми указателями, то можно представить Несуществующий объект

interface Foo {
    public void doBar();
}
class NullFoo implements Foo {
    public void doBar() {} // do nothing
}
class FooUtils {
    public static Foo asFoo(Object o) {
        return (o instanceof Foo) ? (Foo) o : new NullFoo();
    }
}
class Client {
    public void process() {
        Object o = ...;
        Foo foo = FooUtils.asFoo(o);
        foo.doBar(); // don't need to check for null in client
    }
}
25
ответ дан toolkit 7 November 2019 в 21:34
поделиться

Можно использовать instanceof ключевое слово вместо C# is, но нет ничего как as.

Пример:

if(myThing instanceof Foo) {
   Foo myFoo = (Foo)myThing; //Never throws ClassCastException
   ...
}
15
ответ дан Chris Marasti-Georg 7 November 2019 в 21:34
поделиться

Вы могли записать статический служебный метод как это. Я не думаю, что это ужасно читаемо, но это - наилучшее приближение того, что Вы пытаетесь сделать. И если бы Вы используете статический импорт, это не было бы слишком плохо с точки зрения удобочитаемости.

package com.stackoverflow.examples;
public class Utils {
    @SuppressWarnings("unchecked")
    public static <T> T safeCast(Object obj, Class<T> type) {
        if (type.isInstance(obj)) {
            return (T) obj;
        }
        return null;
    }
}

Вот тестовый сценарий, который демонстрирует, как он работает (и что он действительно работает.)

package com.stackoverflow.examples;
import static com.stackoverflow.examples.Utils.safeCast;
import static junit.framework.Assert.assertNotNull;
import static junit.framework.Assert.assertNull;

import org.junit.Test;

public class UtilsTest {

    @Test
    public void happyPath() {
        Object x = "abc";
        String y = safeCast(x, String.class);
        assertNotNull(y);
    }

    @Test
    public void castToSubclassShouldFail() {
        Object x = new Object();
        String y = safeCast(x, String.class);
        assertNull(y);
    }

    @Test
    public void castToUnrelatedTypeShouldFail() {
        Object x = "abc";
        Integer y = safeCast(x, Integer.class);
        assertNull(y);
    }
}
12
ответ дан Mike Deck 7 November 2019 в 21:34
поделиться

Я размышляю, что Вы могли propably кри как оператор

что-то как

as<T,Type> (left, right)  
which evaluates to 
if (typeof(left) == right)
   return (right)left
else
    return null

, я не уверен, как Вы сделали бы это, я - c# в данный момент, и моя шляпа Java стала немного пыльной, так как я покинул университет.

-2
ответ дан LiraNuna 7 November 2019 в 21:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: