Я бы рекомендовал вам напрямую использовать интерфейс, который обеспечивает искру. Он предоставляет много информации и показателей по времени, шагам, использованию сети и т. Д. ...
Вы можете узнать подробнее об этом здесь: https://spark.apache.org/docs/ last / monitoring.html
Кроме того, в новой версии Spark (1.4.0) есть хороший визуализатор, чтобы понять шаги и этапы ваших искровых заданий.
Вот реализация как, как предложено @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
Я думал бы, что Вы будете иметь к самокрутке:
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
}
}
Можно использовать instanceof
ключевое слово вместо C# is
, но нет ничего как as
.
Пример:
if(myThing instanceof Foo) {
Foo myFoo = (Foo)myThing; //Never throws ClassCastException
...
}
Вы могли записать статический служебный метод как это. Я не думаю, что это ужасно читаемо, но это - наилучшее приближение того, что Вы пытаетесь сделать. И если бы Вы используете статический импорт, это не было бы слишком плохо с точки зрения удобочитаемости.
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);
}
}
Я размышляю, что Вы могли propably кри как оператор
что-то как
as<T,Type> (left, right)
which evaluates to
if (typeof(left) == right)
return (right)left
else
return null
, я не уверен, как Вы сделали бы это, я - c# в данный момент, и моя шляпа Java стала немного пыльной, так как я покинул университет.